BZOJ1012——[JSOI2008]最大数maxnumber
一个超水单调队列,也可以用线段树做,这里就贴单调队列的代码。
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <cmath> 5 #include <algorithm> 6 using namespace std; 7 const int maxn=2e5+5; 8 int n,mod,x; 9 int q[maxn],a[maxn],l,r,t,ct,cur; 10 char c; 11 12 int main(){ 13 ios::sync_with_stdio(false); 14 cin>>n>>mod; 15 for(int i=1;i<=n;++i){ 16 cin>>c>>x; 17 if(c=='Q'){ 18 cur=l; 19 while(cur<=r&&q[cur]<ct-x+1)cur++; 20 t=a[q[cur]]; 21 printf("%d\n",t); 22 } 23 else{ 24 int tmp=(t+x)%mod; 25 a[++ct]=tmp; 26 while(l<=r&&tmp>a[q[r]])r--; 27 q[++r]=ct; 28 } 29 } 30 31 return 0; 32 }