91322024-02-15 18:03:36111A Barbárcpp17Hibás válasz 40/10041ms5028 KiB
#pragma GCC optimize("O2")

#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 = 20;
	cin >> N;
	if (N > 1000) {
		return 0;
	}
	vector<int> v(N);
	for(int j=0;j<5;j++){
	for (int i = 0; i < N; i++) {
		v[i] = random(1, N*5);
	}
	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;
		}
		if(0&&i==632){
			cout<<x<<endl;
			cout<<s.size()<<endl;
			for(int j:s)cout<<j<<" ";cout<<endl;
			for(int j:s)cout<<b[j]<<" ";cout<<endl;

			cout<<endl;
			int h = i;
			for (int j = i; j > 0; j--) {
				if (a[j] > h) {
					cout << "at " << j << " " << a[j]<<endl;
					cout<<"from " << h << " ";
					while (h < N && b[h] >= j) {
						h++;
					}
					cout<<"to " << h << " blocker " << b[h]<< endl;
				}
			}
		}
		for (int j = 1; j < s.size(); j++) {
			int y = *max_element(a.begin() + b[s.front()] + 1, a.begin() + b[s[j]] + 1);
			if (j + 1 < s.size() && *max_element(a.begin() + b[s[j]] + 1, a.begin() + b[s[j + 1]] + 1) <= s[j + 1] && y > s[j + 1]) {
				continue;
			}
			if (y <= 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(!!c[i]);
		}
		ans[i] = x;
	}
//	main();
	for (int i = 0; i < N; i++) {
		cout << ans[i] << ' ';
	}
	cout << '\n';
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1828 KiB
2Elfogadva3ms2064 KiB
subtask212/12
3Elfogadva3ms2240 KiB
4Elfogadva3ms2456 KiB
5Elfogadva3ms2808 KiB
6Elfogadva3ms2888 KiB
7Elfogadva3ms3124 KiB
8Elfogadva3ms3208 KiB
9Elfogadva3ms3180 KiB
10Elfogadva3ms3304 KiB
11Elfogadva3ms3208 KiB
12Elfogadva3ms3208 KiB
subtask328/28
13Elfogadva27ms3248 KiB
14Elfogadva34ms3516 KiB
15Elfogadva35ms3604 KiB
16Elfogadva34ms3536 KiB
17Elfogadva41ms3848 KiB
18Elfogadva29ms4112 KiB
19Elfogadva39ms4392 KiB
20Elfogadva39ms4380 KiB
21Elfogadva41ms4424 KiB
subtask40/35
22Hibás válasz3ms4276 KiB
23Hibás válasz3ms4300 KiB
24Hibás válasz3ms4340 KiB
25Hibás válasz2ms4344 KiB
26Hibás válasz3ms4568 KiB
27Hibás válasz3ms4564 KiB
28Hibás válasz3ms4704 KiB
29Hibás válasz2ms4776 KiB
30Hibás válasz3ms4872 KiB
31Hibás válasz2ms4784 KiB
subtask50/25
32Hibás válasz3ms4776 KiB
33Hibás válasz3ms4900 KiB
34Hibás válasz3ms4772 KiB
35Hibás válasz2ms4776 KiB
36Hibás válasz3ms4784 KiB
37Hibás válasz3ms4780 KiB
38Hibás válasz3ms4780 KiB
39Hibás válasz3ms4784 KiB
40Hibás válasz3ms4780 KiB
41Hibás válasz3ms4784 KiB
42Hibás válasz3ms4880 KiB
43Hibás válasz3ms4876 KiB
44Hibás válasz3ms4976 KiB
45Hibás válasz3ms4784 KiB
46Hibás válasz3ms4784 KiB
47Hibás válasz3ms4880 KiB
48Hibás válasz3ms4880 KiB
49Hibás válasz3ms5028 KiB
50Hibás válasz3ms4880 KiB