Submission #1342793

#TimeUsernameProblemLanguageResultExecution timeMemory
1342793Hora000Deda (COCI17_deda)C++20
140 / 140
276 ms4540 KiB
#include<bits/stdc++.h>
using namespace std;

vector<int> st;

void update(int l, int r, int i, int to, int x){
    if(l == r){
        st[x] = to;
        return;
    }
    int mid = (l + r) / 2;
    if(i <= mid) update(l, mid, i, to, 2 * x + 1);
    else update(mid + 1, r, i, to, 2 * x + 2);
    st[x] = min(st[2 * x + 1], st[2 * x + 2]);
}

int query(int lq, int rq, int l, int r, int y, int x){
    if(st[x] > y) return -1;
    if(lq > r || l > rq) return -1;
    if(lq <= l && r <= rq){
        if(st[x] > y) return -1;
        if(l == r) return l;
        int mid = (l + r) / 2;
        if(st[2 * x + 1] <= y) return query(lq, rq, l, mid, y, 2 * x + 1);
        return query(lq, rq, mid + 1, r, y, 2 * x + 2);
    }
    int mid = (l + r) / 2;
    int a = query(lq, rq, l, mid, y, 2 * x + 1);
    if(a != -1) return a;
    return query(lq, rq, mid + 1, r, y, 2 * x + 2);
}

int main(){
    int n, q;
    cin >> n >> q;
    st.resize(4 * n + 4, INT_MAX);
    while(q--){
        char t;
        cin >> t;
        if(t == 'M'){
            int x, i;
            cin >> x >> i;
            update(0, n, i, x, 0);
        }
        else{
            int y, i;
            cin >> y >> i;
            cout << query(i, n, 0, n, y, 0) << "\n";
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...