QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#163744 | #5507. Investors | ahsoltan | WA | 9ms | 3696kb | C++17 | 1.9kb | 2023-09-04 14:44:25 | 2023-09-04 14:44:25 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#ifdef LOCAL
#include "debug.h"
#else
#define debug(...) 2137
#endif
const int INF = 1e9;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int tt;
cin >> tt;
while (tt--) {
int n, k;
cin >> n >> k;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int inv = 0;
vector<vector<int>> e(n);
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (a[j] < a[i]) {
inv++;
e[i + 1].push_back(inv);
e[j].push_back(-inv);
}
}
}
vector<int> vis(inv + 1, -1);
vector<vector<int>> c(n, vector<int>(n));
for (int i = 0; i < n; i++) {
int cnt = 0;
for (int j = i; j < n; j++) {
for (int x : e[j]) {
if (x > 0) {
vis[x] = i;
} else if (x < 0 && vis[-x] == i) {
cnt++;
}
}
c[i][j] = cnt;
}
}
if (k == 0) {
cout << inv << '\n';
continue;
}
auto f = [&] (pair<int, int> x, int j) {
return x.first + (j - 1 >= x.second + 1 ? c[x.second + 1][j - 1] : 0);
};
vector<int> dp(n);
for (int i = 1; i < n; i++) {
dp[i] = c[0][i - 1];
}
for (int i = 1; i < k; i++) {
vector<int> ndp(n);
deque<pair<int, int>> q;
q.push_back({dp[0], 0});
for (int j = 1; j < n; j++) {
while ((int)q.size() > 1 && f(q[1], j) < f(q[0], j)) {
q.pop_front();
}
ndp[j] = f(q[0], j);
while (!q.empty() && q.back().first >= dp[j]) {
q.pop_back();
}
q.push_back({dp[j], j});
}
swap(dp, ndp);
}
int ans = INF;
for (int i = 0; i < n; i++) {
ans = min(ans, dp[i] + (i < n - 1 ? c[i + 1][n - 1] : 0));
}
cout << ans << '\n';
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 2ms
memory: 3504kb
input:
2 6 1 4 5 6 2 2 1 6 2 4 5 6 2 2 1
output:
2 0
result:
ok 2 lines
Test #2:
score: -100
Wrong Answer
time: 9ms
memory: 3696kb
input:
349 6 2 2 1 2 1 2 1 48 12 42 47 39 39 27 25 22 44 45 13 5 48 38 4 37 6 24 10 42 38 12 37 31 19 44 6 29 17 7 12 7 26 35 24 15 9 37 3 27 21 33 29 34 20 14 30 31 21 48 12 1 43 17 46 17 39 40 22 25 2 22 12 4 11 38 12 4 11 1 5 39 44 37 10 19 20 42 45 2 45 37 20 48 34 16 41 23 18 13 44 47 21 29 4 23 18 16...
output:
1 24 17 160 0 2 1 0 21 13 28 0 0 0 1 0 0 0 0 0 0 0 0 188 3 0 0 1 0 0 0 0 0 0 1 0 3 0 0 1 0 0 1 0 0 1 4 0 0 0 0 0 0 0 0 2 0 2 0 0 8 280 0 0 46 4 0 1 0 0 3 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 8 1 12 0 0 0 0 1 35 5 0 0 0 6 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 13 1 0 0 0...
result:
wrong answer 2nd lines differ - expected: '18', found: '24'