蒟蒻求助线段树,这么写有什么错?
查看原帖
蒟蒻求助线段树,这么写有什么错?
261262
WaltVBAlston楼主2021/10/2 12:54

RT,样例输出全0,找不出错误了,求助!!

#include<iostream>
using namespace std;
#define MAXN 200005
int t=0,m,q,n=0,sizing=0;
struct node{
	int l,r,maxn;
}tree[4*MAXN];
void build(int i,int l,int r){
	tree[i].l=l,tree[i].r=r,tree[i].maxn=-2147483647;
	if(l==r){
		tree[i].maxn=0;
		return;
	}
	int mid=(l+r)/2;
	build(i*2,l,mid),build(i*2+1,mid+1,r);
	tree[i].maxn=max(tree[i*2].maxn,tree[i*2+1].maxn);
	return;
}
void update(int i,int x,int k){
	if(tree[i].l==tree[i].r){
		tree[i].maxn=k;
		return;
	}
	int mid=(tree[i].l+tree[i].r)/2;
	if(x<=mid)
		update(i*2,x,k);
	if(x>=mid+1)
		update(i*2+1,x,k);
	tree[i].maxn=max(tree[i*2].maxn,tree[i*2+1].maxn);
	return;
}
int get_max(int i,int l,int r){
	if(tree[i].l>=l&&tree[i].r<=r)
		return tree[i].maxn;
	int mid=(tree[i].l+tree[i].r)/2,res=-2147483647;
	if(mid>=l)
		res=max(res,get_max(i*2,l,r));
	if(mid+1<=r)
		res=max(res,get_max(i*2+1,l,r));
	return res;
}
int main(){
	cin>>m>>q;
	build(1,1,MAXN);
	while(m--){
		char op;
		int x;
		cin>>op>>x;
		if(op=='A')
			n=(n+t)%q,sizing++,update(1,sizing,n);
		else
			cout<<get_max(1,x,sizing)<<endl,t=get_max(1,x,sizing);
	}
	return 0;
}
2021/10/2 12:54
加载中...