Submission #475656

# Submission time Handle Problem Language Result Execution time Memory
475656 2021-09-23T15:12:35 Z Alex_tz307 Deda (COCI17_deda) C++17
140 / 140
96 ms 3700 KB
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f

using namespace std;

struct SegTree {
  int Size;
  vector<int> tree;

  SegTree(int n) {
    Size = 1;
    while (Size < n) {
      Size <<= 1;
    }
    tree.resize(Size << 1, INF);
  }

  void update(int x, int lx, int rx, int pos, int val) {
    if (lx == rx) {
      tree[x] = val;
      return;
    }
    int mid = (lx + rx) >> 1, lSon = x << 1, rSon = x << 1 | 1;
    if (pos <= mid) {
      update(lSon, lx, mid, pos, val);
    } else {
      update(rSon, mid + 1, rx, pos, val);
    }
    tree[x] = min(tree[lSon], tree[rSon]);
  }

  int query(int x, int lx, int rx, int pos, int val) {
    if (lx == rx) {
      return lx;
    }
    int mid = (lx + rx) >> 1, lSon = x << 1, rSon = x << 1 | 1, ans = -1;
    if (pos <= mid && tree[lSon] <= val) {
      ans = query(lSon, lx, mid, pos, val);
    }
    if (ans == -1 && tree[rSon] <= val) {
      return query(rSon, mid + 1, rx, pos, val);
    }
    return ans;
  }
};

void test_case() {
  int n, q;
  cin >> n >> q;
  SegTree tree(n);
  for (int i = 1; i <= q; ++i) {
    char op;
    int x, pos;
    cin >> op >> x >> pos;
    if (op == 'M') {
      tree.update(1, 1, n, pos, x);
    } else {
      cout << tree.query(1, 1, n, pos, x) << '\n';
    }
  }
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int T = 1;
  for (int tc = 1; tc <= T; ++tc) {
    test_case();
  }
  return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 312 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 3 ms 332 KB Output is correct
4 Correct 79 ms 3700 KB Output is correct
5 Correct 92 ms 2416 KB Output is correct
6 Correct 93 ms 3652 KB Output is correct
7 Correct 96 ms 3688 KB Output is correct