UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#203757#534. 猫tkswls1002063ms4104kbC++111.2kb2024-03-14 10:06:332024-03-14 21:22:03

answer

#include <bits/stdc++.h>
#define int long long
#pragma GCC optimize(2)
using namespace std;
const int INF = 1000000000000000000;
int n, m, k, f[100005], g[100005], a[100005], sum[100005],  b[100005], l, r, x[100005], y[100005];
inline long double slope(int q, int p) {
	return (1.0 * (y[p] - y[q])) / (x[p] - x[q]);
}
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m >> k;
	for (int i = 2; i <= n; i++) {
		cin >> sum[i];
		sum[i] += sum[i - 1];
	}
	int p, q;
	for (int i = 1; i <= m; i++) {
		cin >> p >> q;
		a[i] = q - sum[p];
	}
	sort(a + 1, a + m + 1);
	memset(sum, 0, sizeof(sum));
	for (int i = 1; i <= m; i++) {
		sum[i] = sum[i - 1] + a[i];
	}
	k = min(k, m);
	for (int i = 1; i <= m; i++) g[i] = INF;
	g[0] = 0;
	while (k--) {
		l = r = 1;
		b[1] = 0;
		y[0] = x[0] = 0;
		for (int i = 1; i <= m; i++) {
			while (l < r && slope(b[l], b[l + 1]) <= a[i]) {
				l++;
			}
			f[i] = g[b[l]] + sum[b[l]] - sum[i] + i * a[i] - b[l] * a[i];
			y[i] = g[i] + sum[i];
			x[i] = i;
			while (l < r && slope(b[r - 1], b[r]) >= slope(b[r - 1], i)) {
				r--;
			}
			b[++r] = i;
		}
		for (int i = 1; i <= m; i++) {
			g[i] = f[i];
		}
	}
	cout << f[m];
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 4ms
memory: 2116kb

input:

73571 1000 100
38 28 36 82 61 17 47 16 88 90 95 2 26 84 10 48 73 59 29 10 20 94 99 83 79 25 9 41 14 ...

output:

12590216

result:

ok single line: '12590216'

Test #2:

score: 10
Accepted
time: 7ms
memory: 2116kb

input:

67865 1000 100
30 94 97 56 41 18 12 96 27 29 94 76 36 45 75 34 67 98 97 18 86 97 36 76 24 46 34 5 33...

output:

11472767

result:

ok single line: '11472767'

Test #3:

score: 10
Accepted
time: 6ms
memory: 2116kb

input:

91328 1000 100
56 40 66 96 25 10 18 21 71 60 96 17 82 2 45 85 63 30 38 8 78 85 59 49 39 16 45 23 78 ...

output:

15417670

result:

ok single line: '15417670'

Test #4:

score: 10
Accepted
time: 4ms
memory: 2112kb

input:

11409 1000 100
76 81 83 44 95 40 96 96 19 9 87 49 17 15 21 18 65 38 14 56 82 42 19 46 81 10 60 10 16...

output:

2054239

result:

ok single line: '2054239'

Test #5:

score: 10
Accepted
time: 113ms
memory: 2292kb

input:

79788 5000 1000
31 76 3 37 84 2 18 56 64 66 79 16 81 47 75 28 72 18 3 98 61 64 5 78 29 61 51 45 39 4...

output:

5137293

result:

ok single line: '5137293'

Test #6:

score: 10
Accepted
time: 117ms
memory: 2292kb

input:

65698 5000 1000
44 67 75 80 15 60 17 29 91 78 95 90 30 88 88 19 44 53 38 77 91 69 69 63 9 26 87 63 4...

output:

4283409

result:

ok single line: '4283409'

Test #7:

score: 10
Accepted
time: 117ms
memory: 2292kb

input:

81269 5000 1000
13 90 53 94 71 23 35 73 54 9 97 62 17 91 2 69 96 89 76 9 97 79 67 55 58 80 41 28 96 ...

output:

5295068

result:

ok single line: '5295068'

Test #8:

score: 10
Accepted
time: 115ms
memory: 2288kb

input:

61212 5000 1000
43 64 47 16 76 77 54 81 7 33 78 96 13 59 68 18 51 16 87 75 48 46 71 90 79 68 96 67 6...

output:

3944436

result:

ok single line: '3944436'

Test #9:

score: 10
Accepted
time: 1428ms
memory: 4104kb

input:

92921 50000 1000
17 71 72 27 7 47 4 39 93 80 3 74 13 59 42 76 35 85 86 78 37 91 57 89 50 6 89 100 36...

output:

101887288

result:

ok single line: '101887288'

Test #10:

score: 10
Accepted
time: 152ms
memory: 4040kb

input:

93840 50000 100
96 92 90 98 100 94 99 94 96 93 96 93 96 91 100 90 99 100 91 99 93 97 98 100 95 95 91...

output:

2170029592

result:

ok single line: '2170029592'

Extra Test:

score: 0
Extra Test Passed