제출 #1354892

#제출 시각아이디문제언어결과실행 시간메모리
1354892datluong_04Deda (COCI17_deda)C++20
60 / 140
52 ms7580 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 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 tuoi nho nhat sao cho >= b va tram nho nhat can tim <= y
// walking on segment tree
int query(int id , int l , int r , int y , int b){
    if(seg[id] >= y || r < b) return -1;

    if(l == r) return l;

    int mid = (l + r) / 2;
    int res = query(2 * id , l , mid , y , b);
    if(res == -1) return query(2 * id + 1 , mid + 1 , r , y , b);
    return res;
}

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

    FOR(i , 1, q){
        char c;
        cin >> c;
        if(c == 'M'){
            int x , a;
            cin >> x >> a;
            // x la tram xe, a la tuoi 
            update(1 , 1 , n , a , x);
        }

        else{
            int y , b;
            cin >> y >> b;
            // y la tram , b la tuoi
            cout << query(1 , 1 , n , y , b) << "\n";

        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...