救救孩子吧,一晚上了,全WA
查看原帖
救救孩子吧,一晚上了,全WA
376467
QDHSLGYYJK楼主2021/1/11 23:55
#include<cstdio>
#define ll long long
using namespace std;
const int N=200000;
template<typename T>
void read(T &x){//快读数字 
	x=0;
	int f=1;
	char ch=getchar(); 
	while (ch<'0'||ch>'9'){
		if (ch=='-')
			f=-1;
		ch=getchar();
	}
	while (ch>='0'&&ch<='9'){
		x=x*10+ch-'0';
		ch=getchar();
	}
	x*=f;
}
template<typename T>
void write(T x){//快写数字 
	if (x<0){
		putchar(' ');
		x*=-1;
	}
	if (x>9)
		write(x/10);
	putchar(x%10+0x30);
}
void readch(char &ch){//快读字符 
	ch=getchar();
	while (ch<'A'||ch>'Z')
		ch=getchar();
}
struct mpstk{//单调栈 
	int p=0;
	int len=0;
	ll t=0;
	ll a[N+5];
	int x[N+5];
	void add(ll b,ll P){//添加元素
		b=(b+t)%P; 
		while (len&&x[len]<b)
			--len;
		x[++len]=b;
		a[len]=++p;
		t=b;
	}
	void query(int L){//二分查找 
		int l=1,r=len,m;
		while (l<r){
			m=(l+r)>>1;
			if (a[m]>=p-L+1)
				r=m;
			else
				l=m+1;
		}
		write(x[l]);
		putchar('\n');
	}
};
int M;
ll P,n;
char c;
mpstk a;
int main(){
	read(M);read(P);
	while (M--){
		readch(c);
		read(n);
		if (c=='A')
			a.add(n,P);
		else
			a.query(n);
	}
	return 0;
}
2021/1/11 23:55
加载中...