Submission #1335301

#TimeUsernameProblemLanguageResultExecution timeMemory
1335301tsengangFountain (eJOI20_fountain)C++20
0 / 100
243 ms29560 KiB
#include <bits/stdc++.h>
#define ll int
#define ff first
#define ss second
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define ertunt return
using namespace std;
ll mod = 1e9+7;
vector<ll> adj[600007];
vector<ll>vis(200005);
vector<ll> f(600005), inv(600005);
ll modpow(ll a, ll b){
    ll r = 1;
    while(b){
        if(b & 1){
            r *= a;
            r %= mod;
        }
        a *= a;
        a %= mod;
        b >>= 1;
    }
    ertunt r;
}
ll nCk(ll n, ll k){
    if(k < 0 || k > n) ertunt 0;
    ertunt f[n] * inv[k] % mod * inv[n - k] % mod;
}
int main(){
	ll n,q;
	stack<ll>s;
	cin >> n >> q;
	vector<ll>d(n+2),c(n+2);
	for(ll i = 1; i <= n; i++){
		cin >> d[i] >> c[i];
	}
	vector<ll>parent(n+2);
	for(ll i = 1; i <= n; i++){
		while(!s.empty() and d[s.top()] <= d[i]){
			s.pop();
		}
		if(s.empty())parent[i] = 0;
		else parent[i] = s.top();
		s.push(i);
	}
	ll lg = 20;
	vector<vector<ll>>up(n+2,vector<ll>(lg+2));
	vector<vector<ll>>sum(n+2,vector<ll>(lg+2));
	for(ll i = 1; i <= n; i++){
		up[i][0] = parent[i];
		sum[i][0] = c[i];
	}
	for(ll k = 1; k <= lg; k++){
		for(ll i = 1; i <= n; i++){
			if(up[i][k-1]){
				up[i][k] = up[up[i][k-1]][k-1];
				sum[i][k] = sum[i][k] + sum[up[i][k-1]][k-1];
			}
			else{
				up[i][k] = 0;
				sum[i][k] = sum[i][k-1];
			}
		}
	}
	while(q--){
		ll x,y;
		cin >> x >> y;
		for(ll i = lg-1; i >= 0; i--){
			if(x and sum[x][i] < y){
				y-=sum[x][i];
				x = up[x][i];
			}
		}	
		if(x == 0){
			cout << 0 << '\n';
		}
		else{
			if(y <= c[x])cout << x << "\n";
			else cout << parent[x] << "\n";
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...