a0分。。
查看原帖
a0分。。
44988
IU李知恩的粉丝楼主2020/7/5 10:45
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ri register int
#define rll register long long
#define For(i,a,b) for(int i=a;i<=b;++i)
#define IOS std::ios::sync_with_stdio(false)
#define L(a) a<<1
#define R(a) a<<1|1
#define P pair<int,int>
#define re read()
#define lowbit(x) ((x)&-(x))
#define Pi 3.1415926

inline int read()
{
    int x=0,f=1;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return x*f;
}

const int dx[4]={0,-1,0,1};
const int dy[4]={-1,0,1,0};
// const int dx[8]={-2,-1,1,2,2,1,-1,-2};
// const int dy[8]={1,2,2,1,-1,-2,-2,-1};
const int inf=0x3f3f3f3f;
const int mod=99999997;
//const int ll=9e18;

const double eps=1e-5;
const int maxn=2e5+100;

struct node
{
	int l,r;
	ll val;
}tree[maxn<<2];
void pushup(int m){
    tree[m].val=max(tree[L(m)].val,tree[R(m)].val);
}

void bulit(int l,int r,int i){
	tree[i].l=l;
	tree[i].r=r;
	if(l==r){
		tree[i].val=0; 
		return;
	}
	int mid=(l+r)>>1;
	bulit(l,mid,L(i));
	bulit(mid+1,r,R(i));
	pushup(i);
}

ll  query(int m,int l,int r) { 
	if(tree[m].l==l&&tree[m].r==r) {
		return tree[m].val;
	}
	int mid=(tree[m].l+tree[m].r)>>1;
	ll temp;
	if(r<=mid)
		temp=query(L(m),l,r);
	else if(l>mid)
		temp=query(R(m),l,r);
	else
		temp=query(L(m),l,mid)+query(R(m),mid+1,r);
	return temp;
}
void update(int i,int x,int v){
    if(tree[i].l==tree[i].r){
		tree[i].val=v;
        return;
    }
    int mid=(tree[i].l+tree[i].r)>>1;
    if(mid<x) update(R(i),x,v);
    else update(L(i),x,v);
    pushup(i);
}
int main(){
	//freopen("in.txt","r",stdin); 
	int t=0;
	int D,m;
	m=re;D=re;
	bulit(1,200010,1);
	int cnt=0;
	while(m--){
		char ch;
		int k;
		cin>>ch>>k;
		if(ch=='A'){
			k=(k+t)%D;
			update(1,++cnt,k);
		}
		else{
			t=query(1,cnt-k+1,cnt);
			cout<<t<<endl;
		}
	}
}
2020/7/5 10:45
加载中...