91302024-02-15 17:46:28111A Barbárcpp17Hibás válasz 12/10039ms5168 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++) {
			if (j + 1 < s.size() && *max_element(a.begin() + b[s[j]] + 1, a.begin() + b[s[j + 1]] + 1) <= s[j + 1]) {
				continue;
			}
			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(!!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
2Elfogadva3ms2060 KiB
subtask212/12
3Elfogadva3ms2284 KiB
4Elfogadva3ms2744 KiB
5Elfogadva3ms2708 KiB
6Elfogadva3ms2932 KiB
7Elfogadva3ms3040 KiB
8Elfogadva3ms3124 KiB
9Elfogadva3ms3340 KiB
10Elfogadva3ms3336 KiB
11Elfogadva3ms3316 KiB
12Elfogadva3ms3544 KiB
subtask30/28
13Elfogadva26ms3456 KiB
14Elfogadva32ms3880 KiB
15Elfogadva32ms4152 KiB
16Elfogadva32ms4180 KiB
17Elfogadva39ms4448 KiB
18Elfogadva28ms4256 KiB
19Elfogadva37ms4312 KiB
20Hibás válasz39ms4300 KiB
21Elfogadva39ms4284 KiB
subtask40/35
22Hibás válasz3ms4240 KiB
23Hibás válasz3ms4140 KiB
24Hibás válasz3ms4348 KiB
25Hibás válasz3ms4600 KiB
26Hibás válasz3ms4480 KiB
27Hibás válasz3ms4528 KiB
28Hibás válasz3ms4536 KiB
29Hibás válasz3ms4444 KiB
30Hibás válasz3ms4540 KiB
31Hibás válasz3ms4640 KiB
subtask50/25
32Hibás válasz3ms4636 KiB
33Hibás válasz3ms4672 KiB
34Hibás válasz3ms4880 KiB
35Hibás válasz3ms4968 KiB
36Hibás válasz3ms4768 KiB
37Hibás válasz3ms4900 KiB
38Hibás válasz3ms4756 KiB
39Hibás válasz3ms4752 KiB
40Hibás válasz3ms4980 KiB
41Hibás válasz3ms5064 KiB
42Hibás válasz3ms4968 KiB
43Hibás válasz3ms5064 KiB
44Hibás válasz3ms5072 KiB
45Hibás válasz3ms4964 KiB
46Hibás válasz3ms5064 KiB
47Hibás válasz3ms5064 KiB
48Hibás válasz3ms5168 KiB
49Hibás válasz3ms5164 KiB
50Hibás válasz3ms5068 KiB