Submission #1303700

#TimeUsernameProblemLanguageResultExecution timeMemory
1303700itzmanuDeda (COCI17_deda)C++20
140 / 140
63 ms5424 KiB
#include <bits/stdc++.h> using namespace std; #define nitro ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define int long long #define vi vector<long long> #define spc " " #define yes "YES" #define no "NO" #define endl "\n" const int INF = 1e18; const int maxn = 200005; const int mod = 32768; int tree[4 * maxn]; void build(int node, int start, int end) { if (start == end) { tree[node] = INF; } else { int mid = (start + end) / 2; build(2 * node, start, mid); build(2 * node + 1, mid + 1, end); tree[node] = min(tree[2 * node], tree[2 * node + 1]); } } void update(int node, int start, int end, int idx, int val) { if (start == end) { tree[node] = val; return; } int mid = (start + end) / 2; if (idx <= mid) update(2 * node, start, mid, idx, val); else update(2 * node + 1, mid + 1, end, idx, val); tree[node] = min(tree[2 * node], tree[2 * node + 1]); } int query(int node, int start, int end, int b, int y) { if (tree[node] > y || end < b) return -1; if (start == end) return start; int mid = (start + end) / 2; int res = -1; if (mid >= b) { res = query(2 * node, start, mid, b, y); } if (res != -1) return res; return query(2 * node + 1, mid + 1, end, b, y); } void solve() { int n, q; cin >> n >> q; build(1, 1, n); while (q--) { char type; int a, b; cin >> type >> a >> b; if (type == 'M') { update(1, 1, n, b, a); } else { cout << query(1, 1, n, b, a) << "\n"; } } } signed main() { nitro int t = 1; //cin >> t; for(int i = 1; i <= t; i++) { solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...