91282024-02-15 17:09:51111A Barbárcpp17Runtime error 12/10039ms4956 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

int random(int l, int h) {
	static mt19937 gen;
	return uniform_int_distribution<int>(l, h)(gen);
}

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 = 1000;
	cin >> N;
	if (N > 1000) {
		return 0;
	}
	vector<int> v(N);
	for (int i = 0; i < N; i++) {
		v[i] = random(1, 1000000000);
	}
	sort(v.begin(), v.end());
	for (int i = 0; i < N; i++) {
		cin >> v[i];
	}
	vector<int> ans(N);
	ans[0] = N - 1;
	ans[N - 1] = 0;
	for (int i = 1; i < N - 1; i++) {
		list<int> l(v.begin(), v.end());
		auto t = next(l.begin(), i);
		while (true) {
			if (*t - *prev(t) <= *next(t) - *t) {
				t = prev(l.erase(t));
			}
			else {
				t = l.erase(t);
			}
			if (t == l.begin()) {
				ans[i] = N - 1;
				break;
			}
			if (t == prev(l.end())) {
				ans[i] = 0;
				break;
			}
		}
	}
	vector<int> a(N);
	vector<int> b(N);
	vector<int> c(N);
	for (int i = 1; i <= N - 2; i++) {
		a[i] = upper_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<vector<int>> rb(N);
//	for (int i = 0; i <= N - 1; i++) {
//		rb[b[i]].push_back(i);
//	}
//	auto update_greater = [&](int l, int r, int x, int y) {
//		while (r >= l) {
//			if (c[r] > x) {
//				c[r] = y;
//			}
//			r--;
//		}
//	};
//	auto update_less = [&](int l, int r, int x, int y) {
//		while (r >= l) {
//			if (c[r] < x) {
//				c[r] = y;
//			}
//			r--;
//		}
//	};
//	for (int i = N - 1; i >= 0; i--) {
//		for (int j : rb[i]) {
//			update_greater(0, j, j, j);
//		}
//		update_less(0, N - 1, a[i], N);
//	}
//	for (int i = 1; i <= N - 2; i++) {
//		int j = min_element(b.begin() + i, b.end() - 1) - b.begin();
//		int ok = 0;
//		for (int k = 1; k <= b[j]; k++) {
//			ok |= a[k] >= j;
//		}
//		int x = ok ? 0 :N-1;
//		if(ans[i]!=x){
//			cout << i<<" "<<!ans[i] <<  " "<<ok<<endl;
//			exit(2);
//		}
//	}
	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);
		if (b[s.front()] == i) {
			c[i] = N - 1;
			continue;
		}
		int x = *max_element(a.begin(), a.begin() + b[s.front()] + 1);
		if (x > s.front()) {
			c[i] = N - 1;
			continue;
		}
		for (int j = 1; j < s.size(); j++) {
			if (*max_element(a.begin() + b[s.front()] + 1, a.begin() + b[s[j]] + 1) <= s[j] && x > s[j]) {
				c[i] = N - 1;
				break;
			}
		}
	}
	for (int i = 1; i <= N - 2; i++) {
		int x = c[i] == N - 1 ? 0 : N - 1;
		if(ans[i]!=x){
			cout<<i<<" "<<!ans[i]<<" "<<!!c[i]<<endl;
			exit(1);
		}
		ans[i] = x;
	}
	for (int i = 0; i < N; i++) {
		cout << ans[i] << ' ';
	}
	cout << '\n';
	return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted3ms1828 KiB
2Accepted3ms1952 KiB
subtask212/12
3Accepted3ms2180 KiB
4Accepted3ms2380 KiB
5Accepted3ms2608 KiB
6Accepted3ms2820 KiB
7Accepted3ms3032 KiB
8Accepted3ms3236 KiB
9Accepted3ms3456 KiB
10Accepted3ms3500 KiB
11Accepted3ms3624 KiB
12Accepted3ms3836 KiB
subtask30/28
13Accepted25ms3952 KiB
14Accepted32ms3960 KiB
15Accepted32ms4240 KiB
16Accepted32ms4148 KiB
17Accepted39ms4056 KiB
18Accepted28ms4040 KiB
19Accepted37ms4048 KiB
20Runtime error39ms4056 KiB
21Accepted39ms4064 KiB
subtask40/35
22Wrong answer2ms4016 KiB
23Wrong answer2ms3988 KiB
24Wrong answer2ms3996 KiB
25Wrong answer2ms3992 KiB
26Wrong answer2ms3996 KiB
27Wrong answer3ms4000 KiB
28Wrong answer3ms4004 KiB
29Wrong answer3ms4256 KiB
30Wrong answer3ms4256 KiB
31Wrong answer3ms4224 KiB
subtask50/25
32Wrong answer3ms4232 KiB
33Wrong answer3ms4360 KiB
34Wrong answer3ms4344 KiB
35Wrong answer3ms4448 KiB
36Wrong answer3ms4556 KiB
37Wrong answer3ms4360 KiB
38Wrong answer3ms4352 KiB
39Wrong answer3ms4732 KiB
40Wrong answer3ms4604 KiB
41Wrong answer3ms4600 KiB
42Wrong answer3ms4820 KiB
43Wrong answer3ms4828 KiB
44Wrong answer3ms4732 KiB
45Wrong answer3ms4728 KiB
46Wrong answer3ms4828 KiB
47Wrong answer3ms4836 KiB
48Wrong answer3ms4860 KiB
49Wrong answer3ms4956 KiB
50Wrong answer3ms4920 KiB