AcWing 1275. 最大数
#include<bits/stdc++.h> #define N 1000100 using namespace std; struct node { int l,r; int data; }e[4*N]; int n,m,cut; void build(int xh,int l,int r) { e[xh].l=l,e[xh].r=r; if(l==r)return; int mid=(l+r)>>1; build(xh<<1,l,mid),build(xh<<1|1,mid+1,r); } void add(int xh,int zb,int data) { int l=e[xh].l,r=e[xh].r; if(l==r)e[xh].data=data; int mid=(l+r)>>1; if(mid<zb)add(xh*2+1,zb,data); else add(xh*2,zb,data); } int ask(int xh,int l,int r) { int ll=e[xh].l,rr=e[xh].r; if(ll>=l&&rr<=r)return e[xh].data; return max(ask(xh<<1,l,r),ask(xh<<1|1,l,r)); } int main() { cin>>n>>m; build(1,1,n); for(int i=1;i<=n;i++) { char s; int x; cin>>s>>x; if(s=='A')add(1,++cut,x%m); else printf("%d\n",ask(1,cut-x+1,cut)); } return 0; }