全部MLE求助
查看原帖
全部MLE求助
809165
The_Wandering_Earth楼主2023/1/11 16:24
#include<bits/stdc++.h>
#define lid (id<<1)
#define rid (id<<1|1)
#define int long long
using namespace std;
const int maxn = 200005;
int n,t,line,m,p,tr[maxn*4]; 
char op;
void add(int id,int v,int k,int l,int r){
	if(l==r){
		tr[id]=k;
		return;
	}
	int mid=(l+r)>>1;
	if(v<=mid)return add(lid,v,k,l,mid);
	else return add(rid,v,k,mid+1,r);
	tr[id]=max(tr[lid],tr[rid])%p;
}
int query(int id,int l1,int r1,int l2,int r2){//1是目标区间,2是目前区间 
	if(l1==l2&&r1==r2)	return tr[id];
	int mid=(l2+r2)>>1;
	if(r1<=mid)return query(lid,l1,r1,l2,mid);
	else if(l1>mid) return query(lid,l1,r1,mid+1,r2);
	else return max(query(lid,l1,r1,l2,mid),query(lid,l1,r1,mid+1,r2));
}
signed main(){
    scanf("%lld%lld",&m,&p);
    for(int i=1;i<=m;i++){
    	scanf("%c",&op);
    	if(op=='Q'){
    		scanf("%lld",&n);
    		if(n==0)t=0;
    		else t=query(1,line-n+1,line,1,m)%p;
    		printf("%lld\n",t);
		}else{
			scanf("%lld",&n);
			n+=t,line++;
			add(1,line,n%p,1,m);
		}
	}
	return 0;
}
2023/1/11 16:24
加载中...