Submission #1269384

#TimeUsernameProblemLanguageResultExecution timeMemory
1269384MateiKing80Tower (JOI24_tower)C++20
0 / 100
177 ms1296 KiB
#include <bits/stdc++.h>

using namespace std;

using ll = long long;
const ll inf = 1e13;


#define int ll


using pii = pair<int, int>;
#define fr first
#define sc second

signed main() {
	int n, q, d, a, b;
	cin >> n >> q >> d >> a >> b;
	//a = 1, b = d;
	vector<pii> inter;
	int jump = n;
	for (int i = 1; i <= n; i ++) {
		int x, y;
		cin >> x >> y;
		inter.push_back({x, y});
		if (y - x + 1 >= d) {
			jump = min(jump, i - 1);
		}
	}
	int lastBefore = 0, crash = inf;
	vector<pii> good;
	good.push_back({0, inter[0].fr - 1});
	for (int i = 0; i < jump; i ++) {
		lastBefore = max(lastBefore + d, inter[i].sc + 1);
		if (i < n - 1 && lastBefore >= inter[i + 1].fr) {
			crash = inter[i].fr - 1;
			break;
		}
		if (i < n - 1)
			good.push_back({lastBefore, inter[i + 1].fr - 1});
		else
			good.push_back({lastBefore, inf});
	}
	crash = min(crash, jump);
	for (int i = 0; i < q; i ++) {
		int x;
		cin >> x; //s-ar putea sa fie ocupat x
		int pos = -1;
		for (int pas = 1 << 20; pas; pas >>= 1)
			if (pos + pas < (int)good.size() && good[pos + pas].fr <= x)
				pos += pas;
		if (pos != -1 && x <= good[pos].sc)
			cout << x << '\n';
		else
			cout << -1 << '\n';
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...