Submission #1200214

#TimeUsernameProblemLanguageResultExecution timeMemory
1200214nguyenan132Deda (COCI17_deda)C++20
140 / 140
110 ms7748 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const ll INF = 2000000005LL; struct SegTree { int n; vector<ll> st; SegTree(int _n=0) { init(_n); } void init(int _n) { n = _n; st.assign(4*n+4, INF); } void update(int p, int l, int r, int pos, ll val) { if (l == r) { st[p] = val; return; } int m = (l + r) >> 1; if (pos <= m) update(p<<1, l, m, pos, val); else update(p<<1|1, m+1, r, pos, val); st[p] = min(st[p<<1], st[p<<1|1]); } void update(int pos, ll val) { update(1, 1, n, pos, val); } int find_first(int p, int l, int r, int ql, ll Y) { if (r < ql || st[p] > Y) return -1; if (l == r) return l; int m = (l + r) >> 1; int res = -1; if (ql <= m) { res = find_first(p<<1, l, m, ql, Y); if (res != -1) return res; } return find_first(p<<1|1, m+1, r, ql, Y); } int find_first(int ql, ll Y) { return find_first(1, 1, n, ql, Y); } }; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N, Q; cin >> N >> Q; SegTree st(N); while (Q--) { char type; cin >> type; if (type == 'M') { ll X; int A; cin >> X >> A; st.update(A, X); } else if (type == 'D') { ll Y; int B; cin >> Y >> B; int ans = st.find_first(B, Y); if (ans == -1) cout << -1 << "\n"; else cout << ans << "\n"; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...