166962025-05-09 12:45:12algoproSzökőkútcpp17Elfogadva 100/100874ms3912 KiB
// UUID: bd76610f-d7e7-401d-905b-4e049bfc9e2d
#include <bits/stdc++.h>
using namespace std;

const int CAP = 314;//sqrt n


int main() {
	int n, q;
	cin >> n >> q;

	vector<int> dia(n+1);
	dia[n] = 1e9+1;

	vector<int> tonext(n+1);
	vector<int> next(n);
	vector<int> nextjmp(n+1);
	vector<int> tonextjmp(n+1, 0);
	nextjmp[n] = n;

	for(int i = 0; i != n; i++){
		cin >> dia[i] >> tonext[i];
	}


	

	vector<int> veiw(n+1);
	veiw[0] = n;
	int pos = 0;

	int i = n;
	while(i--){
		while(dia[veiw[pos]] <= dia[i]) pos--;

		next[i] = veiw[pos];
		nextjmp[i] = veiw[(pos/CAP)*CAP];

		veiw[++pos] = i;

		if(pos % CAP) tonextjmp[i] = tonext[i]+tonextjmp[next[i]];


		//cout << i << ": " << next[i] << " " << nextjmp[i] << " " << tonextjmp[i] << endl;
	}

	//delete(&veiw);

	tonextjmp[n] = 1e9+1;
	tonext[n] = 1e9+1;

	for(int i = 0; i != n; i++){
		if(!tonextjmp[i]) tonextjmp[i] = tonextjmp[next[i]]+tonext[i];
	}

	while(q--){
		long long r, v;
		cin >> r >> v; r--;

		while(tonextjmp[r] < v){
			v -= tonextjmp[r];
			r = nextjmp[r];
		}

		//cout << r << " " << v << endl;

		while(tonext[r] < v){

			//cout << r << " " << v << endl;
			v -= tonext[r];
			r = next[r];

		}

		if(r == n) r = -1;//fuck yeah 856 ms done!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

		cout << r+1 << endl;
	}
}
//1.5hours
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask130/30
1Elfogadva1ms316 KiB
2Elfogadva2ms316 KiB
3Elfogadva3ms316 KiB
4Elfogadva4ms316 KiB
5Elfogadva7ms316 KiB
6Elfogadva6ms364 KiB
7Elfogadva6ms316 KiB
subtask230/30
1Elfogadva532ms3200 KiB
2Elfogadva589ms3124 KiB
subtask340/40
1Elfogadva6ms316 KiB
2Elfogadva296ms2100 KiB
3Elfogadva874ms3888 KiB
4Elfogadva686ms3900 KiB
5Elfogadva507ms3912 KiB
6Elfogadva495ms3892 KiB