1 | #include<bits/stdc++.h> |
2 | using namespace std; |
3 | const long long N=2e5+10; |
4 | long long m,d; |
5 | vector<long long>v; |
6 | long long f[N][32-__builtin_clz(N)]; |
7 | long long query(long long l,long long r) |
8 | { |
9 | long long g=(long long)(log(r-l+1)/log(2)); |
10 | return max(f[l][g],f[r-(1<<g)+1][g]); |
11 | } |
12 | void init(int i) |
13 | { |
14 | long long lgn=32-__builtin_clz(v.size()); |
15 | for(long long j=1;j<=lgn;j++) |
16 | { |
17 | if((1<<(j-1))-1+i>v.size()) |
18 | { |
19 | break; |
20 | } |
21 | f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]); |
22 | } |
23 | } |
24 | long long t=0; |
25 | int main() |
26 | { |
27 | cin>>m>>d; |
28 | while(m--) |
29 | { |
30 | char opr; |
31 | |
32 | cin>>opr; |
33 | if(opr=='Q') |
34 | { |
35 | long long l; |
36 | |
37 | cin>>l; |
38 | t=query(v.size()-l+1,v.size()); |
39 | |
40 | cout<<t<<"\n"; |
41 | } |
42 | else |
43 | { |
44 | long long n; |
45 | |
46 | cin>>n; |
47 | long long a=(n+t)%d; |
48 | v.push_back(a); |
49 | f[v.size()][0]=a; |
50 | init(v.size()); |
51 | } |
52 | } |
53 | return 0; |
54 | } |