Submission #475655

#TimeUsernameProblemLanguageResultExecution timeMemory
475655Alex_tz307Deda (COCI17_deda)C++17
0 / 140
214 ms4312 KiB
#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; cout << lx << ' ' << pos << ' ' << val << endl; 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 (rx < pos) { return -1; } if (tree[x] > val) { return -1; } if (lx == rx) { if (tree[x] <= val) { return lx; } return -1; } int mid = (lx + rx) >> 1, ans = -1; ans = query(x << 1, lx, mid, pos, val); if (ans == -1) { return query(x << 1 | 1, 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 timeMemoryGrader output
Fetching results...