제출 #1297636

#제출 시각아이디문제언어결과실행 시간메모리
1297636Jawad_Akbar_JJFountain (eJOI20_fountain)C++20
30 / 100
58 ms6092 KiB
#include <iostream>
#include <vector>

using namespace std;
const int N = 1<<17;
int d[N], c[N], pre[N], Ans[N];
vector<pair<int,int>> Vec[N];

int main(){
	ios_base::sync_with_stdio(false); cin.tie(NULL);
	int n, m;
	cin>>n>>m;

	for (int i=1;i<=n;i++)
		cin>>d[i]>>c[i];

	for (int i=1, r, v;i<=m;i++){
		cin>>r>>v;
		Vec[r].push_back({i, v});
	}

	vector<int> stk = {0, 0, 0};
	for (int i=n;i>=1;i--){
		while (stk.size() > 3 and d[stk.back()] <= d[i])
			stk.pop_back();

		pre[i] = pre[stk.back()] + c[i];
		stk.push_back(i);

		for (auto [id, vl] : Vec[i]){
			int l = 0, r = stk.size() - 1;
			while (l + 1 < r){
				int mid = (l + r) / 2;
				if (pre[i] - pre[stk[mid]] < vl)
					r = mid;
				else
					l = mid;
			}
			Ans[id] = stk[r];
		}
	}

	for (int i=1;i<=m;i++)
		cout<<Ans[i]<<' ';
	cout<<'\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...