首页 > 其他分享 >[USACO07JAN] Balanced Lineup G(树状数组)

[USACO07JAN] Balanced Lineup G(树状数组)

时间:2023-06-04 13:11:09浏览次数:34  
标签:include return int lowbit 区间 Balanced query Lineup USACO07JAN

题目大意:

给出长度为n的数组和q个询问,每次问(x,y)区间内最大值和最小值的差是多少

思路:

1.适合用树状数组做此区间求值,首先要明白普通的树状数组的tree[x]表示区间(x-(x&-x),x]的区间和,现在改为求最值,则tree[x]表示为区间(x-(x&-x),x]的最值,建树部分稍作改变即可,询问部分用query函数实现
2.每次询问区间时有两种可能,若x<=y-(y&-y),此时返回max(tree[y],query(x,y-(y&-y)),否则返回max(h[y],query(x,y-1)) (h[y]表示y处对应的数值)

代码如下:

#include<bits/stdc++.h>
#include<algorithm>
#include<unordered_set>
#include<unordered_map>
typedef long long ll;
using namespace std;
#define N 50005
#define lowbit(x) (x&(-x))
int a[N],b[N],h[N]; int n, m;
//初始化
void init() {
	memset(a, 0, sizeof(a));
	for (int i = 1; i <= n; i++)b[i] = 1000005;
}
//最大
void add(int x, int k) {
	for(int i=x;i<=n;i+=lowbit(i)) a[i] = max(a[i],k);
}
//最小
void addmin(int x, int k) {
	for (int i = x; i <= n; i += lowbit(i)) b[i] = min(b[i], k);
}
//区间最大值
int query(int x,int y) {
	if(x==y)return h[x];
	//把区间做拆分
	if (y - lowbit(y) >= x)return max(a[y], query(x, y - lowbit(y)));
	else return max(h[y], query(x, y - 1));
}
//区间最小值
int querymin(int x, int y) {
	if (x == y)return h[x];
	if (y - lowbit(y) >= x)return min(b[y], querymin(x, y - lowbit(y)));
	else return min(h[y], querymin(x, y - 1));
}
int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	init();
	for (int i = 1; i <= n; i++) {
		cin >> h[i];
		//建树
		add(i,h[i]); addmin(i,h[i]);
	}
	while (m--) {
		int x, y; cin >> x >> y;
		cout << query(x,y)-querymin(x,y) << "\n";
	}
	return 0;
}

标签:include,return,int,lowbit,区间,Balanced,query,Lineup,USACO07JAN
From: https://www.cnblogs.com/markun0/p/17455564.html

相关文章

  • SBT模版(Size Balanced Tree)
    关于SBT的介绍及学习,请戳这里。 SBT模版:/*************************************************数据结构:SBT(SizeBalancedTree),又称傻逼树;数据域:值域key,左孩子left,右孩子right,保持平衡的size;性质:每棵子树的大小不小于其兄弟的子树大小;插入:插入算法先简单插入节......
  • NC25045 [USACO 2007 Jan S]Balanced Lineup
    题目链接题目题目描述Forthedailymilking,FarmerJohn'sNcows(1≤N≤100,000)alwayslineupinthesameorder.OnedayFarmerJohndecidestoorganizeagameofUltimateFrisbeewithsomeofthecows.Tokeepthingssimple,hewilltakeacontiguous......
  • 迁移学习(PAT)《Pairwise Adversarial Training for Unsupervised Class-imbalanced Dom
    论文信息论文标题:PairwiseAdversarialTrainingforUnsupervisedClass-imbalancedDomainAdaptation论文作者:WeiliShi,RonghangZhu,ShengLi论文来源:KDD2022论文地址:download 论文代码:download视屏讲解:click1摘要提出问题:类不平衡问题;解决方法:提出了一......
  • 迁移学习《Cluster-Guided Semi-Supervised Domain Adaptation for Imbalanced Medica
    论文信息论文标题:Cluster-GuidedSemi-SupervisedDomainAdaptationforImbalancedMedicalImageClassification论文作者:S.Harada,RyomaBise,KengoAraki论文来源:ArXiv2March2023论文地址:download 论文代码:download视屏讲解:click1摘要一种半监督域自适应方法,......
  • 1234.replace-the-substring-for-balanced-string 替换子串得到平衡字符串
    问题描述1234.替换子串得到平衡字符串解题思路利用两个指针left,right,right从0开始遍历,如果[left,right]之外的字符串中,每个字符出现次数都小于或等于n/4,说明替换[lef......
  • POJ 3274 Gold Balanced Lineup/P1360 [USACO07MAR]黄金阵容均衡
    题目描述FarmerJohn'sNcows(1≤N≤100,000)sharemanysimilarities.Infact,FJhasbeenabletonarrowdownthelistoffeaturessharedbyhiscowstoa......
  • CF1237H Balanced Reversals
    H-BalancedReversals首先可以将相邻的两个点分到一个组中特判无解的情况:00的数量不相等或11的数量不相等若10的数量相等(此时01的数量也相等,因为知道10的数量后......
  • @LoadBalanced注解原理
    在使用springcloudribbon客户端负载均衡的时候,可以给RestTemplatebean加一个@LoadBalanced注解,就能让这个RestTemplate在请求时拥有客户端负载均衡的能力:@Bean@Lo......
  • SP11469 SUBSET - Balanced Cow Subsets Sol
    考虑枚举\(3^n\)种情况,用三进制数表示。对于每一位,\(0\)表示不放,\(1\)表示放入第一个集合,\(2\)表示放入第二个集合。这样显然会TLE。考虑meetinthemiddle。考......
  • C++ Balanced Braces
    C++BalancedBracesAstringofcharactershasbalancedbraces(parentheses,curlybraces,andsquarebraces)ifeachright-facingbraceoccurringinthestrin......