91352024-02-15 18:28:51111A Barbárcpp17Hibás válasz 40/1001.05s380220 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 (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
2Elfogadva3ms2056 KiB
subtask212/12
3Elfogadva3ms2268 KiB
4Elfogadva3ms2500 KiB
5Elfogadva3ms2860 KiB
6Elfogadva3ms2992 KiB
7Elfogadva3ms3076 KiB
8Elfogadva3ms3204 KiB
9Elfogadva3ms3412 KiB
10Elfogadva3ms3500 KiB
11Elfogadva3ms3584 KiB
12Elfogadva3ms3408 KiB
subtask328/28
13Elfogadva3ms3764 KiB
14Elfogadva3ms3908 KiB
15Elfogadva3ms4064 KiB
16Elfogadva3ms4292 KiB
17Elfogadva3ms4584 KiB
18Elfogadva3ms4608 KiB
19Elfogadva3ms4616 KiB
20Elfogadva3ms4648 KiB
21Elfogadva3ms4644 KiB
subtask40/35
22Elfogadva78ms41752 KiB
23Hibás válasz76ms41992 KiB
24Elfogadva68ms42044 KiB
25Elfogadva68ms42048 KiB
26Hibás válasz37ms26308 KiB
27Elfogadva64ms42016 KiB
28Elfogadva63ms41992 KiB
29Elfogadva63ms41924 KiB
30Elfogadva63ms42048 KiB
31Elfogadva71ms41732 KiB
subtask50/25
32Hibás válasz848ms379716 KiB
33Elfogadva717ms342136 KiB
34Hibás válasz805ms379672 KiB
35Hibás válasz754ms342332 KiB
36Hibás válasz765ms364384 KiB
37Elfogadva740ms380176 KiB
38Elfogadva736ms372520 KiB
39Elfogadva745ms380220 KiB
40Elfogadva745ms379892 KiB
41Hibás válasz814ms378636 KiB
42Elfogadva739ms365424 KiB
43Elfogadva759ms374136 KiB
44Hibás válasz805ms378672 KiB
45Elfogadva773ms377144 KiB
46Hibás válasz933ms377208 KiB
47Elfogadva851ms378736 KiB
48Időlimit túllépés1.019s378892 KiB
49Elfogadva874ms378656 KiB
50Időlimit túllépés1.05s191596 KiB