제출 #870153

#제출 시각아이디문제언어결과실행 시간메모리
870153vjudge1Deda (COCI17_deda)C++17
140 / 140
305 ms4632 KiB
#include<bits/stdc++.h> using namespace std; #define lc id + id #define rc id + id + 1 #define mid (l + r) / 2 #define X first #define Y second const int N = 2e5 + 6; int n, q, seg[N * 4]; vector<pair<int, pair<int, int>>> P; void pre() { cin >> n >> q; for (int i = 0; i < N * 4; i++) seg[i] = INT_MAX; } void update(int x, int a, int l = 1, int r = n, int id = 1) { if (l > a || a > r) return; if(l == r) { seg[id] = x; return; } update(x, a, l, mid, lc), update(x, a, mid + 1, r, rc); seg[id] = min(seg[lc], seg[rc]); return; } void check(int a, int l = 1, int r = n, int id = 1) { if (r < a) return; if (l >= a) { P.push_back({id, {l, r}}); return; } check(a, l, mid, lc), check(a, mid + 1, r, rc); } int ans(int x, int l, int r, int id) { if (l == r) return l; if (seg[lc] <= x) return ans(x, l, mid, lc); return ans(x, mid + 1, r, rc); } void Q() { while(q--) { P.clear(); char c; int x, A; cin >> c >> x >> A; if (c == 'M') update(x, A); else { check(A); int k = -1, l = -1, r = -1;; for (auto id: P) if(seg[id.X] <= x) { k = id.X; l = id.Y.X, r = id.Y.Y; break; } if (k == -1) cout << k << endl; else cout << ans(x, l, r, k) << endl; } } } int main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); pre(); Q(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...