社区讨论

听取WA声一片,求助!!!

P2880[USACO07JAN] Balanced Lineup G参与者 2已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@m4grhuvj
此快照首次捕获于
2024/12/09 16:19
去年
此快照最后确认于
2025/11/04 13:05
4 个月前
查看原帖

用的树状数组QAQ

CPP
#include<iostream>
using namespace std;
int n,q,a,b,lis[114514],trem[114514],tren[114514];
inline int lbt(int num){return num&(-num);}
void updt(int id,int num){
	while(id<=n){
		trem[id]=num;tren[id]=num;
		for(int i=1;i<lbt(id);i<<=1){
			if(trem[id]<trem[id-i]){trem[id]=trem[id-i];}
			if(tren[id]>tren[id-i]){tren[id]=tren[id-i];}
		}
		id+=lbt(id);
	}
}
void qjc(int l,int r){
	int ma=-1,mi=114514;
	while(l<=r){
		if(ma<lis[r]){ma=lis[r];}
		if(mi>lis[r]){mi=lis[r];}
		r--;
		while(r-l>=lbt(r)){
			if(ma<trem[r]){ma=trem[r];}
			if(mi>tren[r]){mi=tren[r];}
			r-=lbt(r);
		}
	}
	printf("%d\n",ma-mi);
}
int main(){
	scanf("%d %d",&n,&q);
	for(int i=1;i<=n;i++){
		scanf("%d",&lis[i]);
		updt(i,lis[i]);
	}
	while(q--){
		scanf("%d %d",&a,&b);
		if(b<a){a+=b;b=a-b;a-=b;}
		qjc(a,b);
	}
	return/*结束*/0;
}

回复

10 条回复,欢迎继续交流。

正在加载回复...