91362024-02-15 18:34:07111A Barbárcpp17Wrong answer 40/1001.046s379872 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 {
		if (l == r) {
			return -1;
		}
		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()) {
			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.back()] + 1) <= s.back() && y > s.back()) {
				continue;
			}
			if (y <= s[j] && x > s[j]) {
				ans[i] = 0;
				break;
			}
		}
	}
	for (int i = 0; i < N; i++) {
		cout << ans[i] << ' ';
	}
	cout << '\n';
	return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted3ms1828 KiB
2Accepted3ms2016 KiB
subtask212/12
3Accepted3ms2228 KiB
4Accepted3ms2452 KiB
5Accepted3ms2676 KiB
6Accepted3ms2920 KiB
7Accepted3ms2852 KiB
8Accepted3ms2856 KiB
9Accepted3ms2980 KiB
10Accepted3ms3072 KiB
11Accepted2ms3152 KiB
12Accepted3ms3200 KiB
subtask328/28
13Accepted3ms3544 KiB
14Accepted3ms3688 KiB
15Accepted3ms3640 KiB
16Accepted3ms3640 KiB
17Accepted3ms3644 KiB
18Accepted3ms3896 KiB
19Accepted3ms3856 KiB
20Accepted3ms3852 KiB
21Accepted3ms3884 KiB
subtask40/35
22Accepted75ms41240 KiB
23Wrong answer68ms41296 KiB
24Accepted75ms41560 KiB
25Accepted68ms41560 KiB
26Wrong answer37ms25824 KiB
27Accepted61ms41580 KiB
28Accepted61ms41516 KiB
29Accepted61ms41480 KiB
30Accepted63ms41520 KiB
31Accepted68ms41332 KiB
subtask50/25
32Wrong answer796ms379344 KiB
33Accepted709ms341732 KiB
34Wrong answer797ms379236 KiB
35Wrong answer712ms341744 KiB
36Wrong answer757ms363736 KiB
37Accepted902ms379872 KiB
38Accepted721ms372032 KiB
39Accepted736ms379824 KiB
40Accepted736ms379572 KiB
41Wrong answer801ms378372 KiB
42Accepted731ms365008 KiB
43Accepted921ms373748 KiB
44Wrong answer962ms378284 KiB
45Accepted771ms376776 KiB
46Wrong answer926ms376764 KiB
47Time limit exceeded1.024s378420 KiB
48Time limit exceeded1.019s378504 KiB
49Time limit exceeded1.046s378556 KiB
50Time limit exceeded1.039s378384 KiB