萌新求助线段树,样例过了但全MLE
查看原帖
萌新求助线段树,样例过了但全MLE
523541
Onana_in_XMFLS楼主2021/9/23 08:40
#include<bits/stdc++.h>
#define LL long long
#define ULL unsigned long long
using namespace std;
int sum[800005];
LL tmp,num,M,D,x;
inline void update(int k,int l,int r,int p,int v)
{
	if(l == r && r == p){sum[k] = v;return;}
	LL mid = (l+r)/2;
	if(mid >= p) update(k*2,l,mid,p,v);
	if(mid < p) update(k*2+1,mid+1,r,p,v);
	sum[k] = max(sum[k*2],sum[k*2+1])%D;
}
inline LL query(int k,int l,int r,int x,int y)
{
	if(x <= l && r <= y) return sum[k];
	LL mid = (l+r)/2,a = -1e9;
	if(mid >= x) a = query(k*2,l,mid,x,y);
	if(mid < y) a = max(a,query(k*2+1,mid+1,r,x,y));
	return a;
}
/*inline LL read()
{
	LL x=0,f=1;
	char ch = getchar();
	while(!isdigit(ch)) {if(ch == '-') f = -1;ch = getchar();}
	while(isdigit(ch)) {x=x*10+ch-48;ch=getchar();}
	return f*x;
}*/
int main(int argc,char *argv[])
{ 
	//freopen("data.in","r",stdin);
	//freopen("data.out","w",stdout);
	cin>>M>>D;
	while(M--)
	{
		char op;cin>>op;
		if(op == 'Q') {cin>>x;tmp = query(1,1,M,num-x+1,num);printf("%lld\n",tmp);}
		else {cin>>x;update(1,1,M,num+1,(x+tmp)%D);++num;}
	}
	#ifndef ONLINE_JUDGE
		printf("Time used = %.0lfms\n",((double)clock()/(double)CLOCKS_PER_SEC) * 1000.0);
	#endif
	return 0;exit(0);
}  
2021/9/23 08:40
加载中...