91282024-02-15 17:09:51111A Barbárcpp17Futási hiba 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1828 KiB
2Elfogadva3ms1952 KiB
subtask212/12
3Elfogadva3ms2180 KiB
4Elfogadva3ms2380 KiB
5Elfogadva3ms2608 KiB
6Elfogadva3ms2820 KiB
7Elfogadva3ms3032 KiB
8Elfogadva3ms3236 KiB
9Elfogadva3ms3456 KiB
10Elfogadva3ms3500 KiB
11Elfogadva3ms3624 KiB
12Elfogadva3ms3836 KiB
subtask30/28
13Elfogadva25ms3952 KiB
14Elfogadva32ms3960 KiB
15Elfogadva32ms4240 KiB
16Elfogadva32ms4148 KiB
17Elfogadva39ms4056 KiB
18Elfogadva28ms4040 KiB
19Elfogadva37ms4048 KiB
20Futási hiba39ms4056 KiB
21Elfogadva39ms4064 KiB
subtask40/35
22Hibás válasz2ms4016 KiB
23Hibás válasz2ms3988 KiB
24Hibás válasz2ms3996 KiB
25Hibás válasz2ms3992 KiB
26Hibás válasz2ms3996 KiB
27Hibás válasz3ms4000 KiB
28Hibás válasz3ms4004 KiB
29Hibás válasz3ms4256 KiB
30Hibás válasz3ms4256 KiB
31Hibás válasz3ms4224 KiB
subtask50/25
32Hibás válasz3ms4232 KiB
33Hibás válasz3ms4360 KiB
34Hibás válasz3ms4344 KiB
35Hibás válasz3ms4448 KiB
36Hibás válasz3ms4556 KiB
37Hibás válasz3ms4360 KiB
38Hibás válasz3ms4352 KiB
39Hibás válasz3ms4732 KiB
40Hibás válasz3ms4604 KiB
41Hibás válasz3ms4600 KiB
42Hibás válasz3ms4820 KiB
43Hibás válasz3ms4828 KiB
44Hibás válasz3ms4732 KiB
45Hibás válasz3ms4728 KiB
46Hibás válasz3ms4828 KiB
47Hibás válasz3ms4836 KiB
48Hibás válasz3ms4860 KiB
49Hibás válasz3ms4956 KiB
50Hibás válasz3ms4920 KiB