求助
查看原帖
求助
1012933
walnut_hubby楼主2024/7/11 17:20

快长开小就 WA,开大就 T

#include <iostream>

#include <vector>

#define endl '\n'

#define int long long

using namespace std;

const int B = 4e2 + 5;

int n, x, Mod, Maxb[B], sizb, sumb, t;
char op;

vector<int>b[B];

signed main(){
  // freopen("1.in", "r", stdin);
  // freopen("cpp.out", "w", stdout);
  cin >> n >> Mod;
  while(n--){
    cin >> op >> x;
    if(op == 'Q'){
      int ret = 0;
      for(int i = sumb; i >= sumb - x / B + 1; --i){
        ret = max(ret, Maxb[i]);
      }
      int si = b[sumb - x / B].size() - x % B;
      for(int i = b[sumb - x / B].size() - 1; i >= si; --i) ret = max(ret, b[sumb - x / B][i]);
      cout << ret % Mod << endl;
      t = ret;
    }else{
      if((sizb - 1) / B < sizb / B){
        sumb++;
      }
      sizb++;
      b[sumb].push_back((x + t) % Mod);
      // cout << sumb << endl;
      Maxb[sumb] = max(Maxb[sumb], (x + t) % Mod);
      // cout << (x + t) % Mod << endl;
    }
  }
  return 0;
}

2024/7/11 17:20
加载中...