Submission #162009

#TimeUsernameProblemLanguageResultExecution timeMemory
162009DS007Deda (COCI17_deda)C++14
140 / 140
233 ms4708 KiB
#include <bits/stdc++.h> using namespace std; const int N = 2e5; const int M = 1e9 + 1; #define child 2 * v; int t[4 * N]; int n, q; void update(int v, int tl, int tr, int a, int x) { if (a == tl && tl == tr) { t[v] = x; } else { int tm = (tl + tr) / 2; if (a <= tm) update(v * 2, tl, tm, a, x); else update(v * 2 + 1, tm + 1, tr, a, x); t[v] = min(t[v * 2], t[v * 2 + 1]); } } int query(int v, int tl, int tr, int l, int r, int y) { if (l == tl && r == tr && l == r) return l; int tm = (tl + tr) / 2, a = -2, b = -2; if (t[v * 2] <= y && l <= tm) a = query(v * 2, tl, tm, l, min(tm, r), y); if (a == -2 && t[v * 2 + 1] <= y && r > tm) b = query(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r, y); return a == -2 ? b : (b == -2 ? a : min(a, b)); } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); fill(t, t + 4 * N, M); cin >> n >> q; for (int i = 0; i < q; i++) { char m; int x, a; cin >> m >> x >> a; if (m == 'M') update(1, 0, n - 1, a - 1, x); else cout << query(1, 0, n - 1, a - 1, n - 1, x) + 1 << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...