# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1237325 | mar | Osumnjičeni (COCI21_osumnjiceni) | C++20 | 0 ms | 0 KiB |
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 4e5+10;
const int maxk = 20;
ll l[maxn], r[maxn], up[maxn][maxk];
ll st[4*maxn], lazy[4*maxn];
vector<ll> comp;
void propagate(ll id, ll l, ll r){
if(lazy[id]){
ll mid = (l+r)/2;
update(id*2, l, mid, l, mid, lazy[id]);
update(id*2+1, mid+1, r, mid+1, r, lazy[id]);
lazy[id] = 0;
}
}
void update(ll id, ll l, ll r, ll ql, ll qr, ll val){
if(ql > r || qr < l) return;
if(ql <= l && r <= qr){
st[id] += val;
lazy[id] += val;
return;
}
propagate(id, l, r);
ll mid = (l+r)/2;
update(id*2, l, mid, ql, qr, val);
update(id*2+1, mid+1, r, ql, qr, val);
st[id] = max(st[id*2], st[id*2+1]);
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
ll n, q;
cin >> n;
for(ll i=1;i<=n;i++){
cin >> l[i] >> r[i];
comp.push_back(l[i]);
comp.push_back(r[i]);
}
sort(comp.begin(), comp.end());
comp.erase(unique(comp.begin(), comp.end()), comp.end());
for(ll i=1;i<=n;i++){
l[i] = lower_bound(comp.begin(), comp.end(), l[i]) - comp.begin() + 1;
r[i] = lower_bound(comp.begin(), comp.end(), r[i]) - comp.begin() + 1;
}
ll j = 0;
for(ll i=1;i<=n;i++){
while(j < n && st[1] <= 1){
j++;
update(1, 1, 2*n, l[j], r[j], 1);
}
if(st[1] > 1) up[i][0] = j;
else up[i][0] = j + 1;
update(1, 1, 2*n, l[i], r[i], -1);
}
up[n+1][0] = n+1;
for(ll k=1;k<maxk;k++){
for(ll i=1;i<=n+1;i++){
up[i][k] = up[up[i][k-1]][k-1];
}
}
cin >> q;
while(q--){
ll a, b;
cin >> a >> b;
ll ans = 0;
for(ll k=maxk-1;k>=0;k--){
if(up[a][k] <= b){
ans += (1ll << k);
a = up[a][k];
}
}
cout << ans+1 << endl;
}
return 0;
}