Submission #745243

#TimeUsernameProblemLanguageResultExecution timeMemory
745243sword060Osumnjičeni (COCI21_osumnjiceni)C++17
110 / 110
883 ms149496 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+5,M=18;
struct Node{
	int l=-1,r=-1,mx=0,lzy=-1;
};
vector<Node>t(1);
void prop(int i){
	if(t[i].lzy==-1)return;
	if(t[i].l==-1){
		t[i].l=t.size();
		t.emplace_back();
	}
	if(t[i].r==-1){
		t[i].r=t.size();
		t.emplace_back();
	}
	t[t[i].l].mx=max(t[t[i].l].mx,t[i].lzy);
	t[t[i].r].mx=max(t[t[i].r].mx,t[i].lzy);
	t[t[i].l].lzy=max(t[t[i].l].lzy,t[i].lzy);
	t[t[i].r].lzy=max(t[t[i].r].lzy,t[i].lzy);
	t[i].lzy=-1;
}
int get(int i,int l,int r,int s,int e){
	if(l>=s&&r<=e)return t[i].mx;
	if(l>e||r<s)return 0;
	int mid=(l+r)/2;
	prop(i);
	if(t[i].l==-1){
		t[i].l=t.size();
		t.emplace_back();
	}
	if(t[i].r==-1){
		t[i].r=t.size();
		t.emplace_back();
	}
	return max(get(t[i].l,l,mid,s,e),get(t[i].r,mid+1,r,s,e));
}
void upd(int i,int l,int r,int s,int e,int v){
	if(l>=s&&r<=e){
		t[i].mx=max(t[i].mx,v);
		t[i].lzy=v;
		return;
	}
	if(l>e||r<s)return;
	int mid=(l+r)/2;
	if(t[i].l==-1){
		t[i].l=t.size();
		t.emplace_back();
	}
	if(t[i].r==-1){
		t[i].r=t.size();
		t.emplace_back();
	}
	upd(t[i].l,l,mid,s,e,v);upd(t[i].r,mid+1,r,s,e,v);
	t[i].mx=max(t[t[i].l].mx,t[t[i].r].mx);
}
int x,q,l[N],r[N],nxt[N][20];
int main(){
	ios::sync_with_stdio(0);cin.tie(0);
	cin>>x;
	for(int i=1;i<=x;i++)cin>>l[i]>>r[i];
	for(int i=1;i<=x;i++){
		nxt[i][0]=max(nxt[i-1][0],get(0,1,1e9,l[i],r[i]));
		upd(0,1,1e9,l[i],r[i],i);
		for(int j=1;j<=M;j++)
			nxt[i][j]=nxt[nxt[i][j-1]][j-1];
	}
	cin>>q;
	while(q--){
		int c1,c2,ans=1;cin>>c1>>c2;
		for(int i=M;i>=0;i--)
			if(nxt[c2][i]>=c1)
				c2=nxt[c2][i],ans+=(1<<i);
		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...