91332024-02-15 18:10:06111A Barbárcpp17Hibás válasz 75/1001.054s379800 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
#ifdef CB
	freopen("in.txt", "r", stdin);
//	freopen("out.txt", "w", stdout);
#endif
	int N;
	cin >> N;
	vector<int> v(N);
	for (int i = 0; i < N; i++) {
		cin >> v[i];
	}
	vector<int> a(N);
	vector<int> b(N);
	for (int i = 1; i <= N - 2; i++) {
		a[i] = lower_bound(v.begin(), v.end(), v[i] * 2 - v[i - 1]) - v.begin() - 1;
		b[i] = lower_bound(v.begin(), v.end(), v[i] * 2 - v[i + 1]) - v.begin();
	}
	vector<array<int, 20>> spt(N);
	for (int i = 0; i < N; i++) {
		spt[i][0] = a[i];
	}
	for (int j = 1; j < 20; j++) {
		for (int l = 0, r = 1 << j - 1; r < N; l++, r++) {
			spt[l][j] = max(spt[l][j - 1], spt[r][j - 1]);
		}
	}
	auto query = [&](int l, int r) {
		int i = __lg(r - l);
		return max(spt[l][i], spt[r - (1 << i)][i]);
	};
	vector<int> ans(N);
	ans[0] = N - 1;
	ans[N - 1] = 0;
	vector<int> s;
	for (int i = N - 2; i >= 1; i--) {
		while (!s.empty() && b[s.back()] >= b[i]) {
			s.pop_back();
		}
		s.push_back(i);
		ans[i] = N - 1;
		int x = query(0, b[s.front()] + 1);
		if (x > s.front()) { // jump to end from last blocker
			ans[i] = 0;
			continue;
		}
		for (int j = 1; j < s.size(); j++) {
			int y = query(b[s.front()] + 1, b[s[j]] + 1);
			if (j + 1 < s.size() && query(b[s[j]] + 1, b[s[j + 1]] + 1) <= s[j + 1] && y > s[j + 1]) { // didnt reach blocker s[j]
				continue;
			}
			if (y <= s[j] && x > s[j]) { // jump to end from blocker s[j]
				ans[i] = 0;
				break;
			}
		}
	}
	for (int i = 0; i < N; i++) {
		cout << ans[i] << ' ';
	}
	cout << '\n';
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1824 KiB
2Elfogadva3ms2016 KiB
subtask212/12
3Elfogadva3ms2252 KiB
4Elfogadva3ms2464 KiB
5Elfogadva3ms2676 KiB
6Elfogadva3ms2880 KiB
7Elfogadva3ms2968 KiB
8Elfogadva3ms2968 KiB
9Elfogadva3ms3228 KiB
10Elfogadva3ms3176 KiB
11Elfogadva3ms3180 KiB
12Elfogadva3ms3308 KiB
subtask328/28
13Elfogadva3ms3656 KiB
14Elfogadva3ms3880 KiB
15Elfogadva3ms3848 KiB
16Elfogadva3ms3756 KiB
17Elfogadva3ms3924 KiB
18Elfogadva3ms3888 KiB
19Elfogadva3ms3896 KiB
20Elfogadva3ms3892 KiB
21Elfogadva3ms3896 KiB
subtask435/35
22Elfogadva67ms41052 KiB
23Elfogadva67ms41016 KiB
24Elfogadva67ms41052 KiB
25Elfogadva67ms41264 KiB
26Elfogadva37ms25560 KiB
27Elfogadva61ms41392 KiB
28Elfogadva63ms41248 KiB
29Elfogadva61ms41268 KiB
30Elfogadva61ms41308 KiB
31Elfogadva68ms41164 KiB
subtask50/25
32Elfogadva962ms379432 KiB
33Elfogadva708ms341724 KiB
34Elfogadva968ms379536 KiB
35Hibás válasz865ms341960 KiB
36Hibás válasz910ms363932 KiB
37Elfogadva739ms379796 KiB
38Elfogadva727ms372028 KiB
39Elfogadva902ms379800 KiB
40Elfogadva894ms379800 KiB
41Elfogadva970ms378580 KiB
42Elfogadva884ms365420 KiB
43Elfogadva902ms374176 KiB
44Elfogadva955ms378832 KiB
45Elfogadva921ms377268 KiB
46Elfogadva768ms377244 KiB
47Elfogadva847ms378856 KiB
48Időlimit túllépés1.026s378804 KiB
49Elfogadva879ms378872 KiB
50Időlimit túllépés1.054s191460 KiB