제출 #1138715

#제출 시각아이디문제언어결과실행 시간메모리
1138715m_kulasDeda (COCI17_deda)C++20
140 / 140
76 ms17736 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
#define pb push_back

const int N = 200'100;
constexpr int base = 1 << 20;

LL tree[2*base];

void build(int v, int a, int b)
{
    if(a==b)
        tree[v] = LLONG_MAX;
    else
    {
        int mid = (a+b)/2;
        build(v*2, a, mid);
        build(v*2+1, mid+1, b);
        tree[v] = LLONG_MAX;
    }
}

void update(int v, int a, int b, int pos, int val)
{
    if(a==b)
        tree[v] = val;
    else
    {
        int mid = (a+b)/2;
        if(pos <= mid) update(v*2, a, mid, pos, val);
        else update(v*2+1, mid+1, b, pos, val);

        tree[v] = min(tree[v*2], tree[v*2+1]);
    }
}
int p, k, val;
int get_first(int v, int a, int b)
{
   // cout << v << " " << a << " " << b << " : " << tree[v] << endl;
    if(a > k || b < p)
        return -1;

    if(tree[v] > val || tree[v] == LLONG_MAX)
        return -1;

    if(a==b)
        return a;

    int mid = (a+b)/2;
    int left = get_first(2*v, a, mid);
    if(left != -1) return left;
    return get_first(2*v+1, mid+1, b);
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n, m;
    cin >> n >> m;
    build(1, 1, base-1);
    while(m--)
    {
        char t; int a, b;
        cin >> t >> a >> b;

        if(t == 'M')
        {
            update(1, 1, base-1, b, a);
        }
        else
        {
            p = b, k = n, val = a;
            cout << get_first(1, 1, base-1) << "\n";
        }
    }


}
#Verdict Execution timeMemoryGrader output
Fetching results...