#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[20][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[0][i]=j+1;
s.erase({l[i],i});
}
nxt[0][n+1]=n+1;
for(ll i=n+1;i>=1;i--){
for(ll j=1;j<=19;j++){
nxt[j][i]=nxt[j-1][nxt[j-1][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;
for(ll i=19;i>=0;i--){
if(nxt[i][l]<=r){
l=nxt[i][l];
ans+=(1ll<<i);
}
}
cout<<++ans<<'\n';
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |