QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#515316#5507. Investors2hukTL 11ms145260kbC++203.4kb2024-08-11 17:05:572024-08-11 17:05:57

Judging History

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

  • [2024-08-11 17:05:57]
  • 评测
  • 测评结果:TL
  • 用时:11ms
  • 内存:145260kb
  • [2024-08-11 17:05:57]
  • 提交

answer

#include <bits/stdc++.h>
#define fastcall __attribute__((optimize("-O3")))
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")

using namespace std;

const int N = 6010;

int n, k, a[N];
int w[N][N];    // [l, r] 内的逆序对数

struct BIT {
  int tr[N];
  
  void modify(int u, int x) {
    for (int i = u; i <= 6000; i += i & -i) tr[i] += x;
  }
  
  int query(int u) {
    if (u < 0) return 0;
    int res = 0;
    for (int i = u; i; i -= i & -i) res += tr[i];
    return res;
  }
  
  void clear() {
    memset(tr, 0, sizeof tr);
  }
}T;

int f[N][N];

void solve(int k, int l, int r, int ql, int qr) {
  // cout << l << ' ' << r << '\n';
  if (l == r) {
    for (int i = ql; i <= qr; ++ i )
      f[k][l] = min(f[k][l], f[k][i] + w[i + 1][l]);
    return;
  }
  int mid = l + r >> 1;
  int M = -1;
  for (int i = ql; i <= qr && i < mid; ++ i )
    if (M == -1 || f[k][mid] > f[k - 1][i] + w[i + 1][mid]) {
      f[k][mid] = f[k - 1][i] + w[i + 1][mid];
      M = i;
    }
  // cout << M << '\n';
  solve(k, l, mid, ql, M);
  solve(k, mid + 1, r, M, qr);
}

int solve() {
  cin >> n >> k;
  
  for (int i = 1; i <= n; ++ i ) cin >> a[i];
  
  for (int l = 1; l <= n; ++ l ) {
    T.clear();
    for (int r = l; r <= n; ++ r ) {
      w[l][r] = w[l][r - 1] + T.query(6000) - T.query(a[r]);
      T.modify(a[r], 1);
    }
  }
  
  memset(f, 0x3f, sizeof f);
  f[0][0] = 0;
  // for (int i = 0; i <= n; ++ i )
    // for (int j = 0; j <= n; ++ j )
      // f[i][j] = 
  for (int i = 1; i <= k; ++ i ) {
    solve(i, 1, n, 0, n - 1);
  }
  
  return f[k][n];
}

int main() {
  int T;
  cin >> T;
  while (T -- ) cout << solve() << '\n';
  return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 11ms
memory: 145260kb

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
Time Limit Exceeded

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
0
0
110
0
0
0
0
0
0
0
0
0
0

result: