91332024-02-15 18:10:06111A Barbárcpp17Wrong answer 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;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted3ms1824 KiB
2Accepted3ms2016 KiB
subtask212/12
3Accepted3ms2252 KiB
4Accepted3ms2464 KiB
5Accepted3ms2676 KiB
6Accepted3ms2880 KiB
7Accepted3ms2968 KiB
8Accepted3ms2968 KiB
9Accepted3ms3228 KiB
10Accepted3ms3176 KiB
11Accepted3ms3180 KiB
12Accepted3ms3308 KiB
subtask328/28
13Accepted3ms3656 KiB
14Accepted3ms3880 KiB
15Accepted3ms3848 KiB
16Accepted3ms3756 KiB
17Accepted3ms3924 KiB
18Accepted3ms3888 KiB
19Accepted3ms3896 KiB
20Accepted3ms3892 KiB
21Accepted3ms3896 KiB
subtask435/35
22Accepted67ms41052 KiB
23Accepted67ms41016 KiB
24Accepted67ms41052 KiB
25Accepted67ms41264 KiB
26Accepted37ms25560 KiB
27Accepted61ms41392 KiB
28Accepted63ms41248 KiB
29Accepted61ms41268 KiB
30Accepted61ms41308 KiB
31Accepted68ms41164 KiB
subtask50/25
32Accepted962ms379432 KiB
33Accepted708ms341724 KiB
34Accepted968ms379536 KiB
35Wrong answer865ms341960 KiB
36Wrong answer910ms363932 KiB
37Accepted739ms379796 KiB
38Accepted727ms372028 KiB
39Accepted902ms379800 KiB
40Accepted894ms379800 KiB
41Accepted970ms378580 KiB
42Accepted884ms365420 KiB
43Accepted902ms374176 KiB
44Accepted955ms378832 KiB
45Accepted921ms377268 KiB
46Accepted768ms377244 KiB
47Accepted847ms378856 KiB
48Time limit exceeded1.026s378804 KiB
49Accepted879ms378872 KiB
50Time limit exceeded1.054s191460 KiB