91262024-02-15 17:06:47111A Barbárcpp17Runtime error 12/10041ms5424 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] = 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<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
1Accepted3ms1836 KiB
2Accepted3ms2064 KiB
subtask212/12
3Accepted3ms2284 KiB
4Accepted3ms2496 KiB
5Accepted3ms2548 KiB
6Accepted3ms2808 KiB
7Accepted3ms2752 KiB
8Accepted3ms2880 KiB
9Accepted3ms3100 KiB
10Accepted3ms3332 KiB
11Accepted3ms3548 KiB
12Accepted3ms3744 KiB
subtask30/28
13Accepted26ms4112 KiB
14Accepted32ms4328 KiB
15Accepted34ms4420 KiB
16Accepted32ms4272 KiB
17Accepted39ms4544 KiB
18Accepted29ms4484 KiB
19Accepted39ms4504 KiB
20Runtime error39ms4536 KiB
21Accepted41ms4532 KiB
subtask40/35
22Wrong answer2ms4476 KiB
23Wrong answer2ms4480 KiB
24Wrong answer3ms4568 KiB
25Wrong answer3ms4572 KiB
26Wrong answer3ms4696 KiB
27Wrong answer3ms4640 KiB
28Wrong answer3ms4544 KiB
29Wrong answer3ms4540 KiB
30Wrong answer3ms4640 KiB
31Wrong answer3ms4640 KiB
subtask50/25
32Wrong answer3ms4648 KiB
33Wrong answer3ms4744 KiB
34Wrong answer3ms4736 KiB
35Wrong answer3ms4740 KiB
36Wrong answer3ms4644 KiB
37Wrong answer3ms4640 KiB
38Wrong answer3ms4776 KiB
39Wrong answer3ms4856 KiB
40Wrong answer3ms4860 KiB
41Wrong answer3ms4952 KiB
42Wrong answer3ms4960 KiB
43Wrong answer3ms4984 KiB
44Wrong answer3ms5060 KiB
45Wrong answer3ms5060 KiB
46Wrong answer3ms5292 KiB
47Wrong answer3ms5424 KiB
48Wrong answer3ms5408 KiB
49Wrong answer3ms5284 KiB
50Wrong answer3ms5272 KiB