91312024-02-15 17:48:08111A Barbárcpp17Futási hiba 12/10037ms4912 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
1Elfogadva3ms1832 KiB
2Elfogadva3ms2056 KiB
subtask212/12
3Elfogadva3ms2236 KiB
4Elfogadva3ms2204 KiB
5Elfogadva3ms2212 KiB
6Elfogadva3ms2436 KiB
7Elfogadva3ms2560 KiB
8Elfogadva3ms2648 KiB
9Elfogadva3ms2848 KiB
10Elfogadva3ms3060 KiB
11Elfogadva3ms3272 KiB
12Elfogadva3ms3364 KiB
subtask30/28
13Elfogadva24ms3756 KiB
14Elfogadva30ms4056 KiB
15Elfogadva32ms3940 KiB
16Elfogadva30ms3800 KiB
17Elfogadva37ms3816 KiB
18Elfogadva28ms3768 KiB
19Elfogadva37ms3952 KiB
20Futási hiba37ms4184 KiB
21Elfogadva37ms4044 KiB
subtask40/35
22Hibás válasz3ms3992 KiB
23Hibás válasz2ms4108 KiB
24Hibás válasz2ms4212 KiB
25Hibás válasz2ms4116 KiB
26Hibás válasz2ms4092 KiB
27Hibás válasz2ms3996 KiB
28Hibás válasz3ms3992 KiB
29Hibás válasz3ms4212 KiB
30Hibás válasz3ms4204 KiB
31Hibás válasz2ms4264 KiB
subtask50/25
32Hibás válasz2ms4364 KiB
33Hibás válasz3ms4492 KiB
34Hibás válasz3ms4576 KiB
35Hibás válasz3ms4484 KiB
36Hibás válasz3ms4492 KiB
37Hibás válasz3ms4580 KiB
38Hibás válasz3ms4576 KiB
39Hibás válasz3ms4580 KiB
40Hibás válasz3ms4496 KiB
41Hibás válasz3ms4492 KiB
42Hibás válasz3ms4496 KiB
43Hibás válasz3ms4588 KiB
44Hibás válasz3ms4556 KiB
45Hibás válasz3ms4652 KiB
46Hibás válasz3ms4888 KiB
47Hibás válasz3ms4900 KiB
48Hibás válasz3ms4804 KiB
49Hibás válasz3ms4912 KiB
50Hibás válasz3ms4900 KiB