제출 #495321

#제출 시각아이디문제언어결과실행 시간메모리
495321uncriptedFountain (eJOI20_fountain)C++11
100 / 100
700 ms40116 KiB
//unfin
#include<bits/stdc++.h>
#define s second
#define f first
using namespace std;
pair<long long,long long> go[100050][20];
long long par[100050];
long long d[100050];
long long c[100050];
int main(){
long long n,q;
cin>>n>>q;

for(long long i=1; i<=n; i++){
cin>>d[i];
cin>>c[i];

}
d[n+1]=INT_MAX;
d[0]=INT_MAX;
stack<long long> s;
s.push(n+1);
for(long long i=n; i>=1; i--){
	while(d[i]>=d[s.top()]){
		s.pop();
	}
	go[i][0].s=s.top();
	par[s.top()]=i;
	go[i][0].f=c[i];
	s.push(i);
}
/*
for(long long i=1; i<20; i++){
	for(long long ii=1; ii<200005; ii++){
	
			go[ii][i].s=long long_MAX;

		
	}
}*/
for(long long i=1; i<20; i++){
	for(long long ii=1; ii<100050; ii++){
		go[ii][i].f=go[go[ii][i-1].s][i-1].f+go[ii][i-1].f;
		go[ii][i].s=go[go[ii][i-1].s][i-1].s;
		if(ii>n){
			go[ii][i].s=n+1;
		}
	}
}
for(long long i=1; i<=q; i++){
	long long x,y;
	cin>>x>>y;
	long long j=19;
	long long st=x;
	if(y>go[st][19].f){
		cout<<0<<endl;
		continue;
	}
	for(j=19; j>=0; j--){
		
		if(y>go[st][j].f){
			y-=go[st][j].f;
			st=go[st][j].s;
		}
		
	}
	cout<<st<<endl;
	
	
}	
	
	
	
	
	
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...