Submission #1290641

#TimeUsernameProblemLanguageResultExecution timeMemory
1290641saif_ahmedDeda (COCI17_deda)C++20
140 / 140
576 ms5004 KiB
#include <bits/stdc++.h> using namespace std; //define using ll = long long; using ld = long double; #define F first #define S second #define pb push_back #define all(x) begin(x), end(x) #define rall(x) rbegin(x), rend(x) #define fio freopen("input.txt","r",stdin);freopen("output.txt","w",stdout) #define serein ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0) #define MT for(int tt=1;tt<=_t;tt++) #define CP cout<<"Case "<<tt<<": " template<typename T> void read(vector<T>& v) { for (auto& x : v) cin >> x; } void yes(bool f) { cout << (f ? "YES" : "NO") << '\n'; } void Yes(bool f) { cout << (f ? "Yes" : "No") << '\n'; } //constants const int M=1e9+7; const int N=1e6+3; const int inf=INT_MAX; class SegTree { public: int n; vector<int> tree; SegTree(int size) { n = size; tree.assign(4 * n, 0LL); } void build(int node, int st, int en) { if (st == en) { tree[node] = inf; return; } int mid = (st + en) / 2; build(node * 2, st, mid); build(node * 2 + 1, mid + 1, en); tree[node] = min(tree[node * 2], tree[node * 2 + 1]); } int query(int node, int st, int en, int l, int r) { if (st > r || en < l) return INT_MAX; if (st >= l && en <= r) return tree[node]; int mid = (st + en) / 2; int q1 = query(node * 2, st, mid, l, r); int q2 = query(node * 2 + 1, mid + 1, en, l, r); return min(q1,q2); } void update(int node, int st, int en, int idx, int val) { if (st == en) { tree[node] = val; return; } int mid = (st + en) / 2; if (idx <= mid) update(node * 2, st, mid, idx, val); else update(node * 2 + 1, mid + 1, en, idx, val); tree[node] = min(tree[node * 2], tree[node * 2 + 1]); } }; void solve(){ int n, q; cin>>n>>q; SegTree seg(n); seg.build(1,0,n-1); while(q--){ char t; cin>>t; if(t=='M'){ int idx; int val; cin>>val>>idx; idx--; seg.update(1, 0, n-1, idx, val); } else{ int y, b; cin>>y>>b; b--; int ans = -1; int lo = b, hi = n-1; while(lo<=hi){ int m = (lo+hi)/2; int mn = seg.query(1,0,n-1, b,m); if(mn>y){ lo = m+1; } else{ ans = m+1; hi = m-1; } } cout<<ans<<'\n'; } } } int main() { serein; // clock_t z = clock(); int _t = 1; //cin>>_t; MT { solve(); } // cerr << "Run Time : " << ((double)(clock() - z) / CLOCKS_PER_SEC); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...