제출 #1186696

#제출 시각아이디문제언어결과실행 시간메모리
1186696prideliqueeeDeda (COCI17_deda)C++20
140 / 140
72 ms11076 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define f first
#define s second
int s[200010];
pair<int,int> mn[800000];
int ans;
void update(int l,int r,int i,int index,int val)
{
    if(index<l||index>r)
    return;
    if(l==r)
    {
        mn[i]={val,val};
        return;
    }
    int mid=(l+r)/2;
    update(l,mid,i*2,index,val);
    update(mid+1,r,i*2+1,index,val);
    mn[i]={mn[i*2].f,min(mn[i*2].s,mn[i*2+1].s)};
}
void query(int l,int r,int i,int index,int val)
{
    if(index>r)
    return;
    if(l>=index&&mn[i].f<=val)
    {
        ans=min(ans,l);
        return;
    }
    if(mn[i].s>val)
    return;
    int mid=(l+r)/2;
    query(l,mid,i*2,index,val);
    if(ans<800000)
    return;
    else
    query(mid+1,r,i*2+1,index,val);
}
void build(int l,int r,int i)
{
    if(l==r)
    {
        mn[i]={LLONG_MAX,LLONG_MAX};
        return;
    }
    int mid=(l+r)/2;
    build(l,mid,i*2);
    build(mid+1,r,i*2+1);
    mn[i]={mn[i*2].f,min(mn[i*2].s,mn[i*2+1].s)};
}
signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n,q;
    cin>>n>>q;
    build(1,n,1);
    while(q--)
    {
        char c;
        cin>>c;
        if(c=='M')
        {
            int x,a;
            cin>>x>>a;
            if(s[a]<x)
            {
                s[a]=x;
                update(1,n,1,a,x);
            }
        }
        else
        {
            int y,b;
            cin>>y>>b;
            ans=LLONG_MAX;
            if(mn[1].s>y)
            {
                cout<<-1<<'\n';
                continue;
            }
            query(1,n,1,b,y);
            if(ans<LLONG_MAX)
            cout<<ans<<'\n';
            else
            cout<<-1<<'\n';
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...