rt。
#include <bits/stdc++.h>
using namespace std;
#define int long long
int m , d , t , now;
int maxtree[ 800005 ];
void PushUp( int p ) { maxtree[ p ] = max( maxtree[ p * 2 ] , maxtree[ p * 2 + 1 ] ) ; }
int GetMax( int l , int r , int x , int y , int p ) {
if( x <= l && r <= y ) return maxtree[ p ];
int mid = ( l + r ) / 2 , Max = INT_MIN;
if( x <= mid ) Max = max( Max , GetMax( l , mid , x , y , p * 2 ) );
if( y > mid ) Max = max( Max , GetMax( mid + 1 , r , x , y , p * 2 + 1 ) );
return Max;
}
void Add( int l , int r , int pos , int val , int p ) {
if( l == r ) {
maxtree[ p ] = val;
return;
}
int mid = ( l + r ) / 2;
if( mid >= pos ) Add( l , mid , pos , val , p * 2 );
if( mid < pos ) Add( mid + 1 , r , pos , val , p * 2 + 1 );
PushUp( p );
}
signed main() {
cin >> m >> d;
while( m-- ) {
char op;
int n;
cin >> op >> n;
if( op == 'Q' ) printf( "%lld\n" , t = ( n == 0 ? 0 : GetMax( 1 , m , now - n + 1 , now , 1 ) ) );
else {
Add( 1 , m , now + 1 , ( n + t ) % d , 1 );
now++;
}
}
return 0;
}