线段树板子全部MLE求助
查看原帖
线段树板子全部MLE求助
366254
dxy2020楼主2022/9/25 21:13

rt,样例过了,全部MLE

#include <bits/stdc++.h>
#define int long long
#define N 200005
using namespace std;
inline void in (int &x){
	int f=1;x=0;char c=getchar();
	while (c>'9'||c<'0'){if (c=='-') f=-1;c=getchar();}
	while (c>='0'&&c<='9'){x=x*10+(c^48);c=getchar();}
	x*=f;
}
int m,D,cnt,x,last;char op[3];
struct Segment_Tree{
	int mx=-(1<<60);
}Tree[N<<2];
inline void push_up (int u){
	Tree[u].mx=max (Tree[u<<1].mx,Tree[u<<1|1].mx);
}
inline void update (int L,int R,int k,int l,int r,int u){
	if (L<=l&&R>=r){Tree[u].mx=k;return ;}
	int mid=l+r>>1;
	if (L<=mid) update (L,R,k,l,mid,u<<1);
	if (R>mid) update (L,R,k,mid+1,r,u<<1|1);
	push_up (u);
}
inline int query (int L,int R,int l,int r,int u){
	if (L<=l&&R<=r) return Tree[u].mx;
	int mid=l+r>>1,MAX=-(1<<60);
	if (L<=mid) MAX=max (MAX,query (L,R,l,mid,u<<1));
	if (R>mid) MAX=max (MAX,query (L,R,mid+1,r,u<<1|1));
	return MAX;
}
signed main (){
	in (m);in (D);
	for (int i=1;i<=m;++i){
		scanf ("%s",op);in (x);
		if (op[0]=='Q'){printf ("%lld\n",last=query (cnt-x+1,cnt,1,m,1));}
		if (op[0]=='A'){++cnt;update (cnt,cnt,(x+last)%D,1,m,1);}
	}
	return 0;
}

2022/9/25 21:13
加载中...