91292024-02-15 17:40:42111A Barbárcpp17Futási hiba 12/10039ms5316 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 = 100;
	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, 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;
		}
		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(1);
		}
		ans[i] = x;
	}
	for (int i = 0; i < N; i++) {
		cout << ans[i] << ' ';
	}
	cout << '\n';
//	main();
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1828 KiB
2Elfogadva3ms2024 KiB
subtask212/12
3Elfogadva3ms2252 KiB
4Elfogadva3ms2600 KiB
5Elfogadva3ms2820 KiB
6Elfogadva3ms2908 KiB
7Elfogadva3ms3128 KiB
8Elfogadva3ms3204 KiB
9Elfogadva3ms3292 KiB
10Elfogadva3ms3156 KiB
11Elfogadva3ms3196 KiB
12Elfogadva3ms3284 KiB
subtask30/28
13Elfogadva26ms3572 KiB
14Elfogadva32ms3816 KiB
15Elfogadva32ms3856 KiB
16Elfogadva32ms3980 KiB
17Elfogadva39ms4296 KiB
18Elfogadva28ms4092 KiB
19Elfogadva37ms4152 KiB
20Futási hiba37ms4084 KiB
21Elfogadva39ms4212 KiB
subtask40/35
22Hibás válasz3ms4164 KiB
23Hibás válasz3ms4116 KiB
24Hibás válasz3ms4248 KiB
25Hibás válasz2ms4332 KiB
26Hibás válasz3ms4552 KiB
27Hibás válasz3ms4560 KiB
28Hibás válasz3ms4688 KiB
29Hibás válasz3ms4548 KiB
30Hibás válasz3ms4640 KiB
31Hibás válasz3ms4644 KiB
subtask50/25
32Hibás válasz3ms4640 KiB
33Hibás válasz3ms4644 KiB
34Hibás válasz3ms4744 KiB
35Hibás válasz3ms4976 KiB
36Hibás válasz3ms5084 KiB
37Hibás válasz3ms5084 KiB
38Hibás válasz3ms5160 KiB
39Hibás válasz3ms5256 KiB
40Hibás válasz3ms5224 KiB
41Hibás válasz3ms5316 KiB
42Hibás válasz3ms5256 KiB
43Hibás válasz3ms5156 KiB
44Hibás válasz3ms4968 KiB
45Hibás válasz3ms4968 KiB
46Hibás válasz3ms5064 KiB
47Hibás válasz3ms4968 KiB
48Hibás válasz3ms4968 KiB
49Hibás válasz3ms5060 KiB
50Hibás válasz3ms5064 KiB