Submission #1354888

#TimeUsernameProblemLanguageResultExecution timeMemory
1354888datluong_04Deda (COCI17_deda)C++20
140 / 140
54 ms9116 KiB
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define FOR(i , a , b) for(int i = a ; i <= b; i++)
#define FAST ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define maxn 200005

ll a[maxn] , seg[4 * maxn];

void update(int id , int l , int r , int pos , ll val){
    if(pos < l || pos > r) return;
    if(l == r){
        seg[id] = min(seg[id] , val);
        return;
    }

    int mid = (l + r) / 2;
    if(pos <= mid) update(2 * id , l , mid , pos , val);
    else update(2 * id + 1 , mid + 1 , r , pos, val);
    seg[id] = min(seg[2 * id] , seg[2 * id + 1]);
}


// tim chi so tram nho nhat <= y va nguoi co do tuoi nho nhat x <= b
int get(int id , int l , int r , int b , int y){
    // neu min node nay > b hoac doan[l , r] dang xet 
    if(seg[id] > b || y > r) return -1;

    if(l == r) return l;

    int mid = (l + r) / 2;
    int res = get(2 * id, l , mid , b , y);

    if(res == -1) return get(2 * id + 1 , mid + 1 , r , b , y);
    return res;
}


int main(){
    FAST;
    int n , q;
    cin >> n >> q;
    FOR(i , 1 , n) a[i] = 1e18;
    FOR(id , 1 , 4 * n) seg[id] = 1e18;

    FOR(i , 1 , q){
        char c;
        cin >> c;
        if(c == 'M'){
            int x , a;
            cin >> x >> a;
            update(1 , 1 , n , a , x);
        }
        else{
            int b , y;
            cin >> b >> y;
            cout << get(1 , 1 , n , b , y) << "\n";
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...