답안 #792584

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
792584 2023-07-25T07:08:45 Z GEN 이지후(#10086) Line Town (CCO23_day1problem3) C++17
0 / 25
1 ms 212 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 = 500005;

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 abs(a[0]) < abs(b[0]); });
	lint dp[2] = {0, lint(1e18)};
	for (int i = n - 1; i >= 0; i--) {
		lint L = 0, R = 0;
		for (int j = 0; j < i; j++) {
			if (a[j][1] < a[i][1])
				L++;
			else
				R++;
		}
		lint nxt[2] = {lint(1e18), lint(1e18)};
		for (int j = 0; j < 2; j++) {
			if (a[i][0] == 0 || ((a[i][0] < 0) == (j) % 2))
				nxt[j ^ 1] = min(nxt[j ^ 1], dp[j] + L);
			if (a[i][0] == 0 || ((a[i][0] < 0) == (j + i) % 2))
				nxt[j] = min(nxt[j], dp[j] + R);
		}
		dp[0] = nxt[0];
		dp[1] = nxt[1];
	//	cout << dp[0] << " " << dp[1] << endl;
	}
	lint ans = min(dp[0], dp[1]);
	if (ans > 1e12)
		ans = -1;
	cout << ans << "\n";
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -