Submission #792669

# Submission time Handle Problem Language Result Execution time Memory
792669 2023-07-25T07:58:54 Z GEN 이지후(#10086) Line Town (CCO23_day1problem3) C++17
3 / 25
124 ms 16844 KB
#include <bits/stdc++.h>
using namespace std;
using lint = long long;
using pi = array<lint, 2>;
#define sz(v) ((int)(v).size())
#define all(v) (v).begin(), (v).end()
const int MAXN = 2005;

struct bit {
	int tree[MAXN];
	void add(int x, int v) {
		for (int i = x + 2; i < MAXN; i += i & -i)
			tree[i] += v;
	}
	int query(int x) {
		int ret = 0;
		for (int i = x + 2; i; i -= i & -i)
			ret += tree[i];
		return ret;
	}
} bit;

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n;
	cin >> n;
	vector<pi> a(n);
	for (int i = 0; i < n; i++) {
		cin >> a[i][0];
		if (i % 2 == 1)
			a[i][0] *= -1;
		a[i][1] = i;
	}
	sort(all(a), [&](const pi &a, const pi &b) { return pi{abs(a[0]), a[1]} < pi{abs(b[0]), b[1]}; });
	lint dp[2] = {0, lint(1e18)};
	for (int i = 0; i < n; i++)
		bit.add(i, 1);
	for (int i = n - 1; i >= 0;) {
		int j = i;
		while (j >= 0 && abs(a[i][0]) == abs(a[j][0])) {
			bit.add(a[j][1], -1);
			j--;
		}
		if (abs(a[i][0]) == 0)
			break;
		vector<array<lint, 3>> values[2];
		for (int k = j + 1; k <= i; k++) {
			int L = bit.query(a[k][1]);
			int R = j + 1 - L;
			if (a[k][0] > 0)
				values[0].push_back({L, R, (int)a[k][1]});
			else
				values[1].push_back({L, R, (int)a[k][1]});
		}
		for (int i = 0; i < 2; i++) {
			for (int j = 1; j < sz(values[i]); j++) {
				values[i][j][0] += values[i][j - 1][0];
			}
			for (int j = sz(values[i]) - 2; j >= 0; j--) {
				values[i][j][1] += values[i][j + 1][1];
			}
		}
		lint nxt[2] = {lint(1e18), lint(1e18)};
		for (int j = 0; j < 2; j++) {
			int LS = (j + 1) % 2;
			int RS = (j + i) % 2;
			int len = sz(values[0]) + sz(values[1]);
			for (int k = 0; k <= len; k++) {
				int pl[2] = {};
				int pr[2] = {sz(values[0]), sz(values[1])};
				vector<int> seq, seqR;
				for (int l = 0; l < k; l++) {
					int pos = (LS + l) % 2;
					if (pl[pos] < sz(values[pos]))
						seq.push_back(values[pos][pl[pos]][2]);
					pl[pos]++;
				}
				for (int l = 0; l < len - k; l++) {
					int pos = (RS + l) % 2;
					pr[pos]--;
					if (pr[pos] >= 0)
						seqR.push_back(values[pos][pr[pos]][2]);
				}
				reverse(all(seqR));
				for (auto &x : seqR)
					seq.push_back(x);
				if (pl[0] == pr[0] && pl[1] == pr[1]) {
					lint cost = 0;
					for (int i = 0; i < sz(seq); i++) {
						bit.add(seq[i], +1);
						cost += i + 1 - bit.query(seq[i]);
					}
					for (int i = 0; i < sz(seq); i++) {
						bit.add(seq[i], -1);
					}
					for (int i = 0; i < 2; i++) {
						if (pl[i])
							cost += values[i][pl[i] - 1][0];
						if (pl[i] < sz(values[i]))
							cost += values[i][pl[i]][1];
					}
					nxt[j ^ (k % 2)] = min(nxt[j ^ (k % 2)], dp[j] + cost);
				}
			}
		}
		dp[0] = nxt[0];
		dp[1] = nxt[1];
		i = j;
		// cout << dp[0] << " " << dp[1] << endl;
	}
	lint ans = min(dp[0], dp[1]);
	if (ans > 1e12)
		ans = -1;
	cout << ans << "\n";
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 75 ms 432 KB Output is correct
5 Correct 74 ms 416 KB Output is correct
6 Correct 124 ms 340 KB Output is correct
7 Correct 22 ms 440 KB Output is correct
8 Correct 124 ms 424 KB Output is correct
9 Correct 89 ms 420 KB Output is correct
10 Correct 81 ms 340 KB Output is correct
11 Correct 82 ms 340 KB Output is correct
12 Correct 82 ms 420 KB Output is correct
13 Correct 53 ms 416 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 75 ms 432 KB Output is correct
5 Correct 74 ms 416 KB Output is correct
6 Correct 124 ms 340 KB Output is correct
7 Correct 22 ms 440 KB Output is correct
8 Correct 124 ms 424 KB Output is correct
9 Correct 89 ms 420 KB Output is correct
10 Correct 81 ms 340 KB Output is correct
11 Correct 82 ms 340 KB Output is correct
12 Correct 82 ms 420 KB Output is correct
13 Correct 53 ms 416 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Runtime error 48 ms 16844 KB Execution killed with signal 11
16 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 75 ms 432 KB Output is correct
5 Correct 74 ms 416 KB Output is correct
6 Correct 124 ms 340 KB Output is correct
7 Correct 22 ms 440 KB Output is correct
8 Correct 124 ms 424 KB Output is correct
9 Correct 89 ms 420 KB Output is correct
10 Correct 81 ms 340 KB Output is correct
11 Correct 82 ms 340 KB Output is correct
12 Correct 82 ms 420 KB Output is correct
13 Correct 53 ms 416 KB Output is correct
14 Incorrect 0 ms 212 KB Output isn't correct
15 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 75 ms 432 KB Output is correct
5 Correct 74 ms 416 KB Output is correct
6 Correct 124 ms 340 KB Output is correct
7 Correct 22 ms 440 KB Output is correct
8 Correct 124 ms 424 KB Output is correct
9 Correct 89 ms 420 KB Output is correct
10 Correct 81 ms 340 KB Output is correct
11 Correct 82 ms 340 KB Output is correct
12 Correct 82 ms 420 KB Output is correct
13 Correct 53 ms 416 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Runtime error 48 ms 16844 KB Execution killed with signal 11
16 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 75 ms 432 KB Output is correct
5 Correct 74 ms 416 KB Output is correct
6 Correct 124 ms 340 KB Output is correct
7 Correct 22 ms 440 KB Output is correct
8 Correct 124 ms 424 KB Output is correct
9 Correct 89 ms 420 KB Output is correct
10 Correct 81 ms 340 KB Output is correct
11 Correct 82 ms 340 KB Output is correct
12 Correct 82 ms 420 KB Output is correct
13 Correct 53 ms 416 KB Output is correct
14 Incorrect 0 ms 212 KB Output isn't correct
15 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 75 ms 432 KB Output is correct
5 Correct 74 ms 416 KB Output is correct
6 Correct 124 ms 340 KB Output is correct
7 Correct 22 ms 440 KB Output is correct
8 Correct 124 ms 424 KB Output is correct
9 Correct 89 ms 420 KB Output is correct
10 Correct 81 ms 340 KB Output is correct
11 Correct 82 ms 340 KB Output is correct
12 Correct 82 ms 420 KB Output is correct
13 Correct 53 ms 416 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Runtime error 48 ms 16844 KB Execution killed with signal 11
16 Halted 0 ms 0 KB -