线段树 Subtask1WA 求助
查看原帖
线段树 Subtask1WA 求助
631544
li_cat楼主2024/7/24 16:28
#include <bits/stdc++.h>
#define MAXN 200005
#define ll long long
using namespace std;
ll tree[MAXN<<2];
ll m,d,past;
ll ls(int x){return x<<1;}
ll rs(int x){return x<<1|1;}
void update(int x){
	tree[x]=max(tree[ls(x)]%d,tree[rs(x)]%d);
}
void xg(int x,int k,int L,int R,int l,int r){
	if(l>=L && r<=R) tree[x]=k%d;
	else{
		ll mid=(l+r)>>1;
		if(L<=mid) xg(ls(x),k,L,R,l,mid);
		if(R>mid) xg(rs(x),k,L,R,mid+1,r);
		update(x);
	}
}
ll query(int x,int L,int R,int l,int r){
	if(l>=L && r<=R) return tree[x];
	else{
		ll maxn=-(1<<16);
		ll mid=(l+r)>>1;
		if(L<=mid) maxn=max(maxn,query(ls(x),L,R,l,mid));
		if(R>mid) maxn=max(maxn,query(rs(x),L,R,mid+1,r));
		return maxn;
	}
}
char op;
ll a,L=0;
int main(){
	for(ll i=1;i<MAXN<<2;++i) tree[i]=-(1<<16);
	cin>>m>>d;
	for(ll i=1;i<=m;++i){
		cin>>op>>a;
		if(op=='Q'){
			past=query(1,L-a+1,L,1,m)%d;if(!a) past=0;
			cout<<past<<'\n';
		}else{
			L++;
			xg(1,a+past,L,L,1,m);
		}
	}
	
	
	return 0;
}
2024/7/24 16:28
加载中...