161802025-04-10 18:04:10algoproSzökőkútcpp17Hibás válasz 0/1001.1s3908 KiB
// UUID: ec800829-ae99-4af8-97db-632f503af7da
#include <bits/stdc++.h>
using namespace std;

const int CAP = 314000;//sqrt n


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

	vector<int> dia(n+1);
	dia[n] = 1e9+1;
	vector<int> cap(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] >> cap[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] = cap[i]+tonextjmp[next[i]];


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

	//delete(&veiw);

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

	for(int i = 0; i != n; i++){
		if(!tonextjmp[i]) tonextjmp[i] = tonextjmp[next[i]]+cap[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(cap[r] < v){

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

		}

		if(r == n) r = -1;

		cout << r+1 << endl;
	}
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/30
1Hibás válasz1ms508 KiB
2Elfogadva2ms316 KiB
3Elfogadva3ms316 KiB
4Elfogadva4ms316 KiB
5Elfogadva8ms436 KiB
6Elfogadva6ms316 KiB
7Hibás válasz6ms316 KiB
subtask20/30
1Időlimit túllépés1.1s2532 KiB
2Időlimit túllépés1.1s2388 KiB
subtask30/40
1Elfogadva6ms316 KiB
2Időlimit túllépés1.085s2100 KiB
3Időlimit túllépés1.085s2792 KiB
4Időlimit túllépés1.085s2868 KiB
5Elfogadva481ms3908 KiB
6Hibás válasz483ms3892 KiB