不是ll的数组也MLE了
查看原帖
不是ll的数组也MLE了
463250
Testlya楼主2021/4/18 13:34

不知道那里错了,把快写改成prinf也是M

#include<bits/stdc++.h>
#define ri register int
#define ll long long
#define ull unsigned long long
#define ls(t) t<<1
#define rs(t) t<<1|1
#define ival int l,int r,int t
#define maxv 1,m,1
#define maxm 200001
inline int read()
{
 	int x=0;bool f=0;char c=getchar();
	while(!isdigit(c)){if(c=='-')f=1;c=getchar();};
	while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
	if(f)return ~(x-1);
	return x;
}
inline void write(int x)
{
	if(x<0)x=~(x-1),putchar('-');
	static int sta[35];ri top=0;
	do{sta[top++]=x%10,x/=10;}while(x);
	while(top)putchar(sta[--top]|48);
}
const int inm=(-1<<31);
int m=read(),d=read(),maxt[maxm<<2],ans0,tot;
inline void pushup(int t){maxt[t]=std::max(maxt[ls(t)],maxt[rs(t)]);}
inline void build(ival)
{
	maxt[t]=inm;
	if(l==r)return;
	int mid=(l+r)>>1;
	build(l,mid,ls(t));
	build(mid+1,r,rs(t));
}
inline void update(int n,int c,ival)
{
	if(l==r){maxt[t]=c;return;}
	int mid=(l+r)>>1;
	if(mid>=n)update(n,c,l,mid,ls(t));
	else update(n,c,mid+1,r,rs(t));
	pushup(t);
}
inline int query(int nl,int nr,ival)
{
	if(l>=nl&&r<=nr)return maxt[t];
	int mid=(l+r)>>1,ans=inm;
	if(mid>=nl)ans=query(nl,nr,l,mid,ls(t));
	if(mid<nr)ans=std::max(ans,query(nl,nr,mid+1,r,rs(t)));
	return ans;
}
int main()
{
	build(maxv);
	for(ri i=1;i<=m;i++)
	{
		char ch=getchar();int x0=read();
		if(ch=='A')update(++tot,(x0+ans0)%d,maxv);
		else
		{
			ans0=query(tot-x0+1,tot,maxv);
			write(ans0);putchar('\n');
		}
	}
	return 0;
}
2021/4/18 13:34
加载中...