91412024-02-15 19:13:15111A Barbárcpp17Hibás válasz 75/1001.062s380388 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 bad = 0;
			for (int k = j + 1; k < s.size(); k++) {
				if (query(b[s[j]] + 1, b[s[k]] + 1) <= s[k] && query(b[s.front()] + 1, b[s[k - 1]] + 1) > s[k]) {
					bad = 1;
				}
			}
			if (bad) {
				break;
			}
			if (query(b[s.front()] + 1, b[s[j]] + 1) <= 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
2Elfogadva3ms2052 KiB
subtask212/12
3Elfogadva3ms2232 KiB
4Elfogadva3ms2448 KiB
5Elfogadva3ms2668 KiB
6Elfogadva3ms2692 KiB
7Elfogadva3ms2704 KiB
8Elfogadva3ms2920 KiB
9Elfogadva3ms3132 KiB
10Elfogadva3ms3476 KiB
11Elfogadva3ms3552 KiB
12Elfogadva3ms3776 KiB
subtask328/28
13Elfogadva3ms4264 KiB
14Elfogadva3ms4128 KiB
15Elfogadva3ms4048 KiB
16Elfogadva3ms4048 KiB
17Elfogadva3ms4052 KiB
18Elfogadva3ms4328 KiB
19Elfogadva3ms4392 KiB
20Elfogadva3ms4264 KiB
21Elfogadva3ms4260 KiB
subtask435/35
22Elfogadva68ms41496 KiB
23Elfogadva75ms41416 KiB
24Elfogadva70ms41408 KiB
25Elfogadva68ms41628 KiB
26Elfogadva41ms25808 KiB
27Elfogadva71ms41620 KiB
28Elfogadva61ms41608 KiB
29Elfogadva61ms41892 KiB
30Elfogadva71ms41988 KiB
31Elfogadva70ms41800 KiB
subtask50/25
32Elfogadva957ms379588 KiB
33Elfogadva855ms342344 KiB
34Elfogadva801ms379812 KiB
35Hibás válasz711ms342388 KiB
36Hibás válasz757ms364396 KiB
37Elfogadva745ms380180 KiB
38Elfogadva725ms372464 KiB
39Elfogadva750ms380388 KiB
40Elfogadva907ms379980 KiB
41Elfogadva806ms378760 KiB
42Elfogadva885ms365596 KiB
43Elfogadva912ms374172 KiB
44Elfogadva818ms378648 KiB
45Elfogadva771ms377112 KiB
46Elfogadva929ms377360 KiB
47Elfogadva902ms378984 KiB
48Időlimit túllépés1.062s191504 KiB
49Időlimit túllépés1.001s378936 KiB
50Elfogadva970ms378872 KiB