Submission #1331564

#TimeUsernameProblemLanguageResultExecution timeMemory
1331564Zone_zoneeDeda (COCI17_deda)C++20
140 / 140
748 ms4584 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;

int seg[4*N];
void upd(int now, int l, int r, int idx, int val){
    if(l > r) return;
    if(l == r){
        seg[now] = min(seg[now], val);
        return;
    }
    int mid = (l+r)>>1;
    if(idx <= mid) upd(now*2, l, mid, idx, val);
    else upd(now*2+1, mid+1, r, idx, val);
    seg[now] = min(seg[now*2], seg[now*2+1]);
}
int query(int now, int l, int r, int ql, int qr){
    if(l > r || l > qr || r < ql) return INT_MAX;
    if(ql <= l && r <= qr) return seg[now];
    int mid = (l+r)>>1;
    return min(query(now*2, l, mid, ql, qr), query(now*2+1, mid+1, r, ql, qr));
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, q;
    cin >> n >> q;
    memset(seg, 0x3f, sizeof seg);
    while(q--){
        char op;
        int station, idx;
        cin >> op >> station >> idx;
        if(op == 'M'){
            upd(1, 1, n, idx, station);
        }else{
            int l = idx, r = n+1;
            while(l < r){
                int mid = (l+r)>>1;
                if(query(1, 1, n, idx, mid) <= station) r = mid;
                else l = mid+1;
            }
            cout << (l == n+1 ? -1 : l) << '\n';
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...