91262024-02-15 17:06:47111A Barbárcpp17Futási hiba 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1836 KiB
2Elfogadva3ms2064 KiB
subtask212/12
3Elfogadva3ms2284 KiB
4Elfogadva3ms2496 KiB
5Elfogadva3ms2548 KiB
6Elfogadva3ms2808 KiB
7Elfogadva3ms2752 KiB
8Elfogadva3ms2880 KiB
9Elfogadva3ms3100 KiB
10Elfogadva3ms3332 KiB
11Elfogadva3ms3548 KiB
12Elfogadva3ms3744 KiB
subtask30/28
13Elfogadva26ms4112 KiB
14Elfogadva32ms4328 KiB
15Elfogadva34ms4420 KiB
16Elfogadva32ms4272 KiB
17Elfogadva39ms4544 KiB
18Elfogadva29ms4484 KiB
19Elfogadva39ms4504 KiB
20Futási hiba39ms4536 KiB
21Elfogadva41ms4532 KiB
subtask40/35
22Hibás válasz2ms4476 KiB
23Hibás válasz2ms4480 KiB
24Hibás válasz3ms4568 KiB
25Hibás válasz3ms4572 KiB
26Hibás válasz3ms4696 KiB
27Hibás válasz3ms4640 KiB
28Hibás válasz3ms4544 KiB
29Hibás válasz3ms4540 KiB
30Hibás válasz3ms4640 KiB
31Hibás válasz3ms4640 KiB
subtask50/25
32Hibás válasz3ms4648 KiB
33Hibás válasz3ms4744 KiB
34Hibás válasz3ms4736 KiB
35Hibás válasz3ms4740 KiB
36Hibás válasz3ms4644 KiB
37Hibás válasz3ms4640 KiB
38Hibás válasz3ms4776 KiB
39Hibás válasz3ms4856 KiB
40Hibás válasz3ms4860 KiB
41Hibás válasz3ms4952 KiB
42Hibás válasz3ms4960 KiB
43Hibás válasz3ms4984 KiB
44Hibás válasz3ms5060 KiB
45Hibás válasz3ms5060 KiB
46Hibás válasz3ms5292 KiB
47Hibás válasz3ms5424 KiB
48Hibás válasz3ms5408 KiB
49Hibás válasz3ms5284 KiB
50Hibás válasz3ms5272 KiB