Submission #827338

#TimeUsernameProblemLanguageResultExecution timeMemory
827338ZeroCoolFountain (eJOI20_fountain)C++14
100 / 100
552 ms37604 KiB
#include <bits/stdc++.h>
#define int long long
#define ll long long
#define ld long double
using namespace std;
 
const int mxn = 1e5 + 5;
const int SQRT = 500;
const int LOG = 20;
const int inf = 1e18;
const int mod = 998244353;
const ld eps = 1e-9;

int up[mxn][LOG];
int st[mxn][LOG];

void solve(int T){
	int n,q;
	cin>>n>>q;

	stack<pair<int,int> > qu;
	

	for(int i = 1;i<=n;i++){
		int l;
		cin>>l;
		cin>>st[i][0];

		while(qu.size() && l > qu.top().first){
			up[qu.top().second][0] = i;
			qu.pop();
		}
		qu.push({l,i});
	}
	for(int j = 1;j<LOG;j++){
		for(int i = 1;i<=n;i++){
			up[i][j] = up[up[i][j-1]][j-1];
			st[i][j] = st[i][j-1] + st[up[i][j-1]][j-1];
		}
	}

	while(q--){
		int a,b;
		cin>>a>>b;

		for(int i = LOG-1;i>=0;i--){
			if(st[a][i] < b){
				b -= st[a][i];
				a = up[a][i];

			}
		}

		cout<<a<<endl;
	}

}
int32_t main(){
	#ifdef ONLINE_JUDGE
    ios::sync_with_stdio(false);
    cin.tie(0);
	#endif
	int t = 1;
	//cin>>t;

	for(int i = 1;i<=t;i++)solve(i);
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...