제출 #1342817

#제출 시각아이디문제언어결과실행 시간메모리
1342817gortomiDeda (COCI17_deda)C++20
140 / 140
318 ms3008 KiB
#include <bits/stdc++.h>
using namespace std;
vector<int> t;
int si;
const int inf = 1e9 + 5;
void upd(int x, int val)
{
    for(t[x += si - 1] = val; x > 1; x >>= 1) t[x >> 1] = min(t[x], t[x ^ 1]);
}
int get(int l, int r)
{
    int res = inf;
    for(l += si - 1, r += si; l < r; l >>= 1, r >>= 1)
    {
        if(l & 1) res = min(res, t[l++]);
        if(r & 1) res = min(res, t[--r]);
    }
    return res;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n, q;
    cin >> n >> q;
    si = n + 1;
    t.resize(2 * si, inf);
    upd(n + 1, 0);
    while(q--)
    {
        char c;
        int x, idx;
        cin >> c >> x >> idx;
        if(c == 'M') upd(idx, x);
        else
        {
            int l = idx - 1, r = n + 1;
            while(l + 1 != r)
            {
                int m = (l + r) / 2;
                if(get(idx, m) <= x) r = m;
                else l = m;
            }
            if(r == n + 1)
            {
                cout << "-1\n";
            }
            else cout << r << "\n";
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...