90pts 求助
查看原帖
90pts 求助
529229
lrmlrm_楼主2023/12/16 10:10
#include<bits/stdc++.h>
#define int long long
using namespace std;
int m,x,sum,mod,t;
char op; 
int a[200010],tree[800010];
inline void update(int x,int l,int r,int find,int k){
	if(l==r){
		tree[x]=k;
		return;
	}
	int mid=(l+r)/2;
	if(find<=mid)
		update(x*2,l,mid,find,k);
	if(find>mid)
		update(x*2+1,mid+1,r,find,k);
	tree[x]=max(tree[x*2],tree[x*2+1])%mod;
} 
inline int query(int x,int l,int r,int find_l,int find_r){
	if(find_l<=l&&r<=find_r)return tree[x];
	int mid=(l+r)/2,sm=-LONG_LONG_MAX;
	if(find_l<=mid)
		sm=max(query(x*2,l,mid,find_l,find_r),sm);
	if(find_r>mid)
		sm=max(query(x*2+1,mid+1,r,find_l,find_r),sm);
	return sm%mod;
} 
signed main(){
	scanf("%lld%lld",&m,&mod);
	for(int i=1;i<=m;i++){
		cin>>op;
		scanf("%d",&x);
		if(op=='A'){
			sum++;
			update(1,1,m,sum,(x+t)%mod);
		}
		if(op=='Q'){
			if(x==0)t=0; 
			else t=query(1,1,m,sum-x+1,sum)%mod; 
			printf("%lld\n",t);
		}
	}
	return 0;
}


sub0最后一个点WA

2023/12/16 10:10
加载中...