这道题很裸,可以练习三种方法(三个愿望一次满足233)
我主要使用单调队列去做,运用单调队列去维护后k个里面最大的数
然后不断进行插入。
这道题我是参考黄学长代码写的,他的博客里还有另外两种做法
附上这道题代码
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 int a[200001],max[200001]; 5 int l,t,m,d,p; 6 char q[1]; 7 int main(){ 8 scanf("%d%d",&m,&d); 9 while(m--){ 10 scanf("%s%d",q,&p); 11 if(q[0]=='A'){ 12 a[++t]=(l+p)%d; 13 for(int i=t;i;i--) 14 { 15 if(max[i]<a[t])max[i]=a[t]; 16 else break; 17 } 18 } 19 else printf("%d ",l=max[t-p+1]); 20 } 21 // system("pause"); 22 return 0; 23 }