Submission #1302250

#TimeUsernameProblemLanguageResultExecution timeMemory
1302250JohanDeda (COCI17_deda)C++20
140 / 140
693 ms4556 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int st[N * 4];
void upd(int v, int l, int r, int pos, int val){
  if(l == r){
    st[v] = val;
    return;
  }
  int mid = (l + r) >> 1;
  if(mid >= pos)upd(v * 2, l, mid, pos, val);
  else upd(v * 2 + 1, mid + 1, r, pos, val);
  st[v] = min(st[v * 2], st[v * 2 + 1]);
}
int ask(int v, int l, int r, int ql, int qr){
  if(l > qr || r < ql)return 1e9;
  if(l >= ql && r <= qr)return st[v];
  int mid = (l + r) >> 1;
  return min(ask(v * 2, l, mid, ql, qr), ask(v * 2 + 1, mid + 1, r, ql, qr));
}
signed main(){
  // freopen("input.txt" , "r" , stdin);
  // freopen("outputt.txt" , "w" , stdout);
  ios_base::sync_with_stdio(0);
  cout.tie(0);
  cin.tie(0);
  int n, q;
  cin >> n >> q; 
  for(int i = 1; i <= n; i++)
    upd(1, 1, n, i, 1e9);
  for(int i = 1; i <= q; i++){
    char type;
    int x, pos;
    cin >> type >> x >> pos;
    if(type == 'M'){
      upd(1, 1, n, pos, x);
    }
    else {
      int l = pos, r = n;
      int best = -1;
      while(r >= l){
        int mid = (l + r) >> 1;
        if(ask(1, 1, n, pos, mid) <= x){
          best = mid;
          r = mid - 1;
        }
        else l = mid + 1;
      }
      cout << best << "\n";
    }
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...