91252024-02-15 16:58:56111A Barbárcpp17Hibás válasz 12/1001.082s42796 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;
	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);
		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
1Elfogadva3ms1700 KiB
2Elfogadva3ms1868 KiB
subtask212/12
3Elfogadva3ms2080 KiB
4Elfogadva3ms2288 KiB
5Elfogadva3ms2504 KiB
6Elfogadva3ms2720 KiB
7Elfogadva3ms2936 KiB
8Elfogadva3ms2992 KiB
9Elfogadva3ms3124 KiB
10Elfogadva3ms3212 KiB
11Elfogadva3ms3336 KiB
12Elfogadva3ms3420 KiB
subtask30/28
13Elfogadva3ms3448 KiB
14Elfogadva3ms3456 KiB
15Elfogadva3ms3464 KiB
16Elfogadva3ms3524 KiB
17Elfogadva3ms3520 KiB
18Elfogadva3ms3520 KiB
19Elfogadva3ms3612 KiB
20Hibás válasz3ms3572 KiB
21Elfogadva3ms3576 KiB
subtask40/35
22Időlimit túllépés1.049s6464 KiB
23Időlimit túllépés1.07s6468 KiB
24Időlimit túllépés1.065s6656 KiB
25Időlimit túllépés1.074s6532 KiB
26Időlimit túllépés1.062s5072 KiB
27Időlimit túllépés1.07s6824 KiB
28Időlimit túllépés1.062s7124 KiB
29Időlimit túllépés1.07s7120 KiB
30Időlimit túllépés1.049s7116 KiB
31Időlimit túllépés1.082s7044 KiB
subtask50/25
32Időlimit túllépés1.072s42532 KiB
33Időlimit túllépés1.072s38748 KiB
34Időlimit túllépés1.078s42564 KiB
35Időlimit túllépés1.067s38864 KiB
36Időlimit túllépés1.057s40812 KiB
37Időlimit túllépés1.049s42428 KiB
38Időlimit túllépés1.057s41532 KiB
39Időlimit túllépés1.078s42492 KiB
40Időlimit túllépés1.065s42512 KiB
41Időlimit túllépés1.052s42368 KiB
42Időlimit túllépés1.059s41056 KiB
43Időlimit túllépés1.062s41976 KiB
44Időlimit túllépés1.067s42328 KiB
45Időlimit túllépés1.059s42112 KiB
46Időlimit túllépés1.075s42036 KiB
47Időlimit túllépés1.07s42552 KiB
48Időlimit túllépés1.078s42492 KiB
49Időlimit túllépés1.07s42672 KiB
50Időlimit túllépés1.077s42796 KiB