全部MLE,但不知道为什么
查看原帖
全部MLE,但不知道为什么
57755
Happy_Orca楼主2022/7/10 19:19

把第二十行

	if(L>=l&&R<=len) return h[p];

改成

	if(L==R) return h[p];

就变成十个WA了

#include<bits/stdc++.h>
#define maxn 800005
using namespace std;
int n,len,TT;
long long t,h[maxn];
inline long long read(){
	long long ret=0;char f=1,ch=getchar();
	while(!isdigit(ch)) f=(ch=='-'?-f:f),ch=getchar();
	while(isdigit(ch)) ret=ret*10+ch-'0',ch=getchar();
	return ret*f;
}
void add(int L,int R,int p,int seat,long long x){
	if(L==R){h[p]=x;return;}
	int mid=(L+R)>>1;
	if(seat<=mid) add(L,mid,p*2,seat,x);
	else add(mid+1,R,p*2+1,seat,x);
	h[p]=max(h[p*2],h[p*2+1]);
}
long long get(int L,int R,int p,int l){
	if(L>=l&&R<=len) return h[p];
	int mid=(L+R)>>1;long long ret=0;
	if(l<=mid) ret=max(ret,get(L,mid,p*2,l));
	if(len>mid) ret=max(ret,get(mid+1,R,p*2+1,l));
	return ret;
}
int main(){
	n=read(),TT=read();
	for(int i=1;i<=n;i++){
		char ch=getchar();
		if(ch=='A'){
			long long x=(read()+t)%TT;
			add(1,n,1,++len,x);
		}else{
			int l=len-read()+1;
			if(l>len){printf("0\n"),t=0;break;}
			t=get(1,n,1,l);
			printf("%lld\n",t);
		}
	}
	return 0;
}
2022/7/10 19:19
加载中...