Submission #1284652

#TimeUsernameProblemLanguageResultExecution timeMemory
1284652supermaniDeda (COCI17_deda)C++17
140 / 140
65 ms5272 KiB
#include <bits/stdc++.h>
using ll = long long;
using namespace std;

const int INF = 1e9;

vector<int> t;
void build(const vector<int>& a, int v, int tl, int tr)
{
    if (tl==tr) t[v]=a[tl];
    else{
        int tm = (tl+tr)/2;
        build(a, v*2, tl, tm);
        build(a, v*2+1, tm+1, tr);
        t[v] = min(t[v*2], t[v*2+1]);
    }
}
int query(int v, int tl, int tr, int l, int r, int Y)
{
    if (l>r) return -1;
    if (t[v] > Y) return -1;
    if (tl == tr) return tl;
    int tm = (tl+tr)/2;
    if (l <= tm) {
        int left_res = query(v*2, tl, tm, l, min(r, tm), Y);
        if (left_res != -1) return left_res;
    }

    if (r > tm) {
        int right_res = query(v*2+1, tm+1, tr, max(l, tm+1), r, Y);
        if (right_res != -1) return right_res;
    }
    
    return -1;

}
void update(int v, int tl, int tr,int pos, int new_val)
{
    if (tl == tr) t[v] = new_val;
    else{
        int tm = (tl+tr)/2;
        if (pos<=tm) update(v*2, tl, tm, pos, new_val);
        else update(v*2+1, tm+1, tr, pos, new_val);
        t[v] = min(t[v*2], t[v*2+1]);
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, M;
    cin >> N >> M;
    t.assign(4*N, 0);
    vector<int> a(N+1);
    for (int i=1; i<=N; i++) a[i] = INF;
    build(a,1,1,N);
    for (int i = 0; i<M; i++)
    {
        char op;
        cin >> op;
        if (op == 'M'){
            int X, A;
            cin >> X >> A;
            update(1,1,N,A,X);
        }
        else{
            int Y, B;
            cin >> Y >> B;
            cout << query(1, 1, N, B, N, Y) << '\n';
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...