全MLE求助
查看原帖
全MLE求助
571841
ZVitality楼主2023/3/13 13:22

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;
}
2023/3/13 13:22
加载中...