제출 #1200287

#제출 시각아이디문제언어결과실행 시간메모리
1200287brover29Osumnjičeni (COCI21_osumnjiceni)C++17
40 / 110
1095 ms17408 KiB
#include <bits/stdc++.h>
//qwerty47924692
using namespace std;
using ll = long long;
const ll N=2e5+29;
const string br="617283";
#define sz(a)(ll)a.size()
#define f first
#define s second
ll n,l[N],r[N],nxt[N];
set<pair<ll,ll>>s;
bool can_insert(ll i){
    auto it=s.lower_bound({l[i],0});
    if(it!=s.end()){
        ll j=it->s;
        if(l[i]<=l[j]&&l[j]<=r[i])return 0;
    }
    if(it!=s.begin()){
        --it;
        ll j=it->s;
        if(l[j]<=l[i]&&l[i]<=r[j])return 0;
    }
    return 1;
}
void calc(){
    ll j=0;
    for(ll i=1;i<=n;i++){
        if(j<i){
            s.clear();
            j=i;
            s.insert({l[i],i});
        }while(j+1<=n&&can_insert(j+1)){
            j++;
            s.insert({l[j],j});
        }
        nxt[i]=j+1;
        s.erase({l[i],i});
    }
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin>>n;
    for(ll i=1;i<=n;i++){
        cin>>l[i]>>r[i];
    }
    calc();
//    for(ll i=1;i<=n;i++)cout<<nxt[i]<<' ';
//    cout<<'\n';
    ll q;
    cin>>q;
    while(q--){
        ll l,r;
        cin>>l>>r;
        ll ans=0;
        while(l<=r){
            l=nxt[l];
            ans++;
        }
        cout<<ans<<'\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...