161692025-04-08 17:38:16algoproSzökőkútcpp17Futási hiba 60/100490ms262144 KiB
// UUID: 438bb543-28c3-4fa8-89f1-9b7120064211
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n, q;cin>>n>>q;
	vector<int> a(n);
	vector<int> c(n);
	vector<int> hova(n, -1);
	stack<int> s;
	for(int i=0;i<n;i++){
		cin>>a[i]>>c[i];
		while(!s.empty() && a[s.top()]<a[i]){
			hova[s.top()]=i;
			s.pop();
		}
		s.push(i);
	}
	vector<vector<long long>> prefix(n);
	vector<vector<int>> index(n);
	vector<bool> visited(n);
	vector<int> holtalalom(n, -1);
	vector<int> hanyadikban(n, -1);
	for(int i=0;i<n;i++){
		if(visited[i]){
			continue;
		}else{
			prefix[i].push_back(0);
			index[i].push_back(0);
			visited[i]=true;
			int x=i;
			while(x!=-1){
				prefix[i].push_back(c[x]+prefix[i].back());
				index[i].push_back(x);
				x=hova[x];
				if (x == -1) break;
				visited[x]=true;
				holtalalom[x]=i;
				hanyadikban[x]=prefix[i].size()-1;
			}
		}
	}
	while(q--){
		int x, y;cin>>x>>y;
		if(holtalalom[x-1]!=-1){
			int h=holtalalom[x-1], z=hanyadikban[x-1];
			int ossz=prefix[h][z];
			y+=ossz;
			int hi=lower_bound(prefix[h].begin(), prefix[h].end(), y)-prefix[h].begin();
			if(hi==prefix[h].size()){
				cout<<0<<'\n';
			}else{
				cout<<index[h][hi]+1<<'\n';
			}
		}else{
			int hi=lower_bound(prefix[x-1].begin(), prefix[x-1].end(), y)-prefix[x-1].begin();
			if(hi==prefix[x-1].size()){
				cout<<0<<'\n';
			}else{
				cout<<index[x-1][hi]+1<<'\n';
			}
		}
	}
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask130/30
1Elfogadva1ms316 KiB
2Elfogadva1ms316 KiB
3Elfogadva2ms508 KiB
4Elfogadva2ms564 KiB
5Elfogadva2ms316 KiB
6Elfogadva4ms1464 KiB
7Elfogadva2ms348 KiB
subtask230/30
1Elfogadva93ms8964 KiB
2Elfogadva98ms8492 KiB
subtask30/40
1Elfogadva2ms564 KiB
2Futási hiba451ms262144 KiB
3Elfogadva133ms9772 KiB
4Futási hiba490ms262144 KiB
5Elfogadva190ms21580 KiB
6Elfogadva155ms18200 KiB