QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#282412#5507. Investorstkrawczyk#WA 2ms3616kbC++231.7kb2023-12-11 23:07:092023-12-11 23:07:10

Judging History

你现在查看的是最新测评结果

  • [2023-12-11 23:07:10]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:3616kb
  • [2023-12-11 23:07:09]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;
typedef long long i64;

void solve() {
    int n, k; cin >> n >> k;
    k++;
    vector<int> a(n + 1);
    for(int i = 1; i <= n; i++) cin >> a[i];
    vector<vector<int>> inv(n + 2, vector<int>(n + 2));
    for(int i = 1 ; i <= n; i++) {
        for(int j = i + 1; j <= n; j++) {
            if(a[i] > a[j]) inv[i][j] = 1;
        }
    }
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            inv[i][j] += inv[i - 1][j] + inv[i][j - 1] - 1 * inv[i - 1][j - 1];           
        }
    }
    auto inv_on_range = [&](int a, int b) -> int {
        return inv[b][b] - inv[a - 1][b] - inv[b][a - 1] + inv[a - 1][a - 1];
    };
    const i64 oo = (i64)n * n;
    i64 lo = 0, hi = oo, ans = -1;
    while (lo <= hi) {
        i64 mid = (lo + hi) / 2;
        auto check = [&](i64 loss) -> pair<i64, int> {
            vector<pair<i64, int>> dp(n + 1, {oo, 0});
            dp[0] = {0, 0};
            for(int i = 0; i <= n; i++) {
                for(int j = i + 1; j <= n; j++) {
                    // biore (i, j]
                    pair<i64, int> para = {dp[i].first + inv_on_range(i + 1, j) + loss, dp[i].second + 1};
                    dp[j] = min(dp[j], para);
                }
            }
            return dp[n];
        };
        auto [gain, used] = check(mid);
        if(used <= k) {
            hi = mid - 1;
            ans = gain - used * mid;
        }
        else {
            lo = mid + 1;
        }
    }
    cout << ans << endl;
}

int32_t main() {
    cin.tie(0)->sync_with_stdio(0);
    int t; cin >> t;
    while(t--) solve();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3616kb

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: 2ms
memory: 3576kb

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:

2
20
18
145
0
6
8
0
15
21
23
0
0
0
1
0
0
0
0
0
0
0
0
161
3
0
0
1
0
0
0
0
0
0
1
0
3
0
0
1
0
0
1
0
0
1
5
0
0
0
0
0
0
0
0
2
0
2
0
0
8
280
0
0
34
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
8
0
0
0
2
0
0
0
0
0
0
0
9
1
14
0
0
0
0
1
13
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
15
1
0
0
0...

result:

wrong answer 1st lines differ - expected: '1', found: '2'