91362024-02-15 18:34:07111A Barbárcpp17Hibás válasz 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1828 KiB
2Elfogadva3ms2016 KiB
subtask212/12
3Elfogadva3ms2228 KiB
4Elfogadva3ms2452 KiB
5Elfogadva3ms2676 KiB
6Elfogadva3ms2920 KiB
7Elfogadva3ms2852 KiB
8Elfogadva3ms2856 KiB
9Elfogadva3ms2980 KiB
10Elfogadva3ms3072 KiB
11Elfogadva2ms3152 KiB
12Elfogadva3ms3200 KiB
subtask328/28
13Elfogadva3ms3544 KiB
14Elfogadva3ms3688 KiB
15Elfogadva3ms3640 KiB
16Elfogadva3ms3640 KiB
17Elfogadva3ms3644 KiB
18Elfogadva3ms3896 KiB
19Elfogadva3ms3856 KiB
20Elfogadva3ms3852 KiB
21Elfogadva3ms3884 KiB
subtask40/35
22Elfogadva75ms41240 KiB
23Hibás válasz68ms41296 KiB
24Elfogadva75ms41560 KiB
25Elfogadva68ms41560 KiB
26Hibás válasz37ms25824 KiB
27Elfogadva61ms41580 KiB
28Elfogadva61ms41516 KiB
29Elfogadva61ms41480 KiB
30Elfogadva63ms41520 KiB
31Elfogadva68ms41332 KiB
subtask50/25
32Hibás válasz796ms379344 KiB
33Elfogadva709ms341732 KiB
34Hibás válasz797ms379236 KiB
35Hibás válasz712ms341744 KiB
36Hibás válasz757ms363736 KiB
37Elfogadva902ms379872 KiB
38Elfogadva721ms372032 KiB
39Elfogadva736ms379824 KiB
40Elfogadva736ms379572 KiB
41Hibás válasz801ms378372 KiB
42Elfogadva731ms365008 KiB
43Elfogadva921ms373748 KiB
44Hibás válasz962ms378284 KiB
45Elfogadva771ms376776 KiB
46Hibás válasz926ms376764 KiB
47Időlimit túllépés1.024s378420 KiB
48Időlimit túllépés1.019s378504 KiB
49Időlimit túllépés1.046s378556 KiB
50Időlimit túllépés1.039s378384 KiB