线段树全部RE求
查看原帖
线段树全部RE求
610384
TimeTravelerFromsosb楼主2022/11/15 21:03
#include<iostream>
#include<cstring>
using namespace std;
#define int long long
inline int ls(int p){return p<<1;}
inline int rs(int p){return p<<1|1;}
const int N=2*1e5+5,F=-1e15;
int D;
int M[N*4+5];
int m,cnt,lth;
void build(){
	for(int i=1;i<=m;i++)
		M[i]=F;
}
int query(int k,int l,int r,int x,int y){
	if(x<=l&&r<=y)return M[k];
	int a=F,b=F,mid=(l+r)>>1;
	if(x<=mid)a=query(k*2,1,mid,x,y);
	if(y>mid)b=query(k*2+1,mid+1,r,x,y);
	return max(a,b);
}
void modify(int k,int l,int r,int x,int v){
	if(l==r){
		M[k]=v;
		return;
	}
	int mid=(l+r)>>1;
	if(x<=mid)modify(k*2,1,mid,x,v);
	if(x>mid) modify(k*2+1,mid+1,r,x,v);
	M[k]=max(M[k*2],M[k*2+1])%D;
}
signed main(){
	cin>>m>>D;
	build();
	for(int i=1;i<=m;i++){
		char c;int A;
		cin>>c>>A;
		if(c=='Q'){
			cnt=query(1,1,m,lth-A+1,m)%D;
			cout<<cnt<<endl;
		}else{
			lth++;
			modify(1,1,m,lth,(A+cnt)%D);
		}
	}
	return 0;
}
2022/11/15 21:03
加载中...