91392024-02-15 19:06:22111A Barbárcpp17Hibás válasz 12/1001.064s380740 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[j + 1]] + 1) < y) {
				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
1Elfogadva3ms1824 KiB
2Elfogadva3ms2064 KiB
subtask212/12
3Elfogadva3ms2276 KiB
4Elfogadva3ms2512 KiB
5Elfogadva3ms2668 KiB
6Elfogadva3ms3032 KiB
7Elfogadva3ms3220 KiB
8Elfogadva3ms3308 KiB
9Elfogadva3ms3276 KiB
10Elfogadva3ms3276 KiB
11Elfogadva3ms3492 KiB
12Elfogadva3ms3492 KiB
subtask30/28
13Elfogadva3ms4096 KiB
14Elfogadva3ms4236 KiB
15Elfogadva3ms4412 KiB
16Elfogadva3ms4628 KiB
17Elfogadva3ms4840 KiB
18Elfogadva3ms4704 KiB
19Elfogadva3ms4700 KiB
20Hibás válasz3ms4700 KiB
21Hibás válasz3ms4728 KiB
subtask40/35
22Hibás válasz72ms41852 KiB
23Hibás válasz71ms41860 KiB
24Hibás válasz74ms41884 KiB
25Hibás válasz71ms42092 KiB
26Hibás válasz41ms26292 KiB
27Elfogadva67ms42108 KiB
28Elfogadva75ms42356 KiB
29Elfogadva67ms42424 KiB
30Elfogadva65ms42464 KiB
31Hibás válasz75ms42276 KiB
subtask50/25
32Hibás válasz912ms380180 KiB
33Hibás válasz765ms342636 KiB
34Időlimit túllépés1.036s380404 KiB
35Hibás válasz777ms342984 KiB
36Hibás válasz814ms365096 KiB
37Elfogadva961ms380740 KiB
38Elfogadva781ms372896 KiB
39Elfogadva963ms380580 KiB
40Elfogadva967ms380400 KiB
41Hibás válasz869ms379172 KiB
42Elfogadva944ms365944 KiB
43Elfogadva820ms374600 KiB
44Időlimit túllépés1.011s379140 KiB
45Elfogadva837ms377740 KiB
46Elfogadva987ms377616 KiB
47Elfogadva916ms379160 KiB
48Elfogadva912ms379092 KiB
49Időlimit túllépés1.064s191540 KiB
50Elfogadva935ms379060 KiB