线段树求调!!
查看原帖
线段树求调!!
519573
Daniel_yao楼主2022/4/5 16:43
#include<bits/stdc++.h>
using namespace std;
const int N = 11000000;
int m, d, cnt, num, ans[N], tree[4*N];

void build_tree(int node, int start, int end, int x){
  if(start == end && start == x){
    tree[node] = ans[start];
    return ;
  }
  int mid = (start + end) / 2;
  int left_node  = 2 * node;
  int right_node = 2 * node + 1;
  if(x <= mid){
    build_tree(left_node, start, mid, x);
  } else {
    build_tree(right_node, mid + 1, end, x);
  }
  tree[node] = max(tree[left_node], tree[right_node]);
}

int query(int node, int start, int end, int L, int R){
  if(L == start && R == end){
    return tree[node];
  }
  int mid = (start + end) / 2;
  int left_node  = 2 * node;
  int right_node = 2 * node + 1;
  if(R <= mid){
    return query(left_node, start, mid, L, R);
  }
  if(L > mid){
    return query(right_node, mid + 1, end, L, R);
  }
  return max(query(left_node, start, mid, L, mid), query(right_node, mid + 1, end, mid + 1, R));
}

int main(){
  char op;
  cin >> m >> d;
  while(m--){
    int x;
    cin >> op;
    if(op == 'A'){
      cin >> x;
      x += num;
      x %= d;
      ans[++cnt] = x;
      build_tree(1, 1, m, cnt);
    } else {
      cin >> x;
      num = query(1, 1, m, cnt - x + 1, cnt );
      cout << num << endl;
    }
  }
  return 0;
}

2022/4/5 16:43
加载中...