UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#203863#3569. 最优子序列lsr100141ms10248kbC++111.3kb2024-03-24 11:16:122024-03-24 12:05:24

answer

#include <bits/stdc++.h>
using namespace std;

#define QwQ3301AwA return 0
#define ll long long

const int N = 2e5 + 5;
int n, m;
vector <int> pos[N];
int w[N];
ll ans = 0;
int val[N];
bool vis[N];
ll f[N][2];

void solve(vector <int> a, vector <int> b) {
	int cn = 0;
	int ia = 0, ib = 0;
	while (ia < (int)a.size() && ib < (int)b.size()) {
		if (a[ia] < b[ib]) cn++, val[cn] = w[a[ia]], vis[cn] = 0, ia++;
		else cn++, val[cn] = w[b[ib]], vis[cn] = 1, ib++;
	}
	while (ia < (int)a.size()) cn++, val[cn] = w[a[ia]], vis[cn] = 0, ia++;
	while (ib < (int)b.size()) cn++, val[cn] = w[b[ib]], vis[cn] = 1, ib++;	
	f[0][0] = f[0][1] = 0;
	for (int i = 1; i <= cn; i++) {
		f[i][0] = f[i - 1][0];
		f[i][1] = f[i - 1][1];
		if (vis[i] == 0) f[i][0] = max(f[i][0], f[i - 1][1] + val[i]);
		else f[i][1] = max(f[i][1], f[i - 1][0] + val[i]);
	}
	ans = max(ans, max(f[cn][0], f[cn][1]));
}

void rsolve(vector <int> a) {
	ll sum = 0;
	for (auto x : a) sum += w[x];
	ans = max(ans, sum);
}

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> w[i];
		pos[w[i] % m].push_back(i);
	}
	for (int i = 1; i <= m / 2; i++) {
		if (m - i == i) continue;
		solve(pos[i], pos[m - i]);
	}
	rsolve(pos[0]);
	if (m % 2 == 0) rsolve(pos[m / 2]);
	cout << ans;
	QwQ3301AwA;
}

详细

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

Test #1:

score: 10
Accepted
time: 0ms
memory: 5968kb

input:

20 13
749987623 375211210 944589514 64972338 389342463 507674971 991531334 890802757 32576979 781213...

output:

2166559486

result:

ok single line: '2166559486'

Test #2:

score: 10
Accepted
time: 3ms
memory: 5972kb

input:

20 15
99582796 12294885 852348789 926605817 849204941 270471458 892887566 974067892 841800457 157511...

output:

2612569905

result:

ok single line: '2612569905'

Test #3:

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

input:

20 114514
292793712 565481935 809761776 941466148 554645876 177476807 703263128 623014274 810635044 ...

output:

941466148

result:

ok single line: '941466148'

Test #4:

score: 10
Accepted
time: 0ms
memory: 6032kb

input:

5000 100
947291260 964017567 669765758 43013623 53333014 819988146 911217742 494187329 319940221 106...

output:

46295823400

result:

ok single line: '46295823400'

Test #5:

score: 10
Accepted
time: 0ms
memory: 6036kb

input:

5000 2
964428160 970707036 188825719 674826526 726016066 685695742 349231170 584008877 274267609 734...

output:

1268402153500

result:

ok single line: '1268402153500'

Test #6:

score: 10
Accepted
time: 0ms
memory: 6088kb

input:

5000 5000
972867911 291165229 665116301 137971950 441605559 496300169 443483413 438670482 148278584 ...

output:

4230095000

result:

ok single line: '4230095000'

Test #7:

score: 10
Accepted
time: 38ms
memory: 10248kb

input:

200000 151515
452179336 951343439 696121316 19484808 308437468 425400338 992090515 244609102 3305997...

output:

6555540551

result:

ok single line: '6555540551'

Test #8:

score: 10
Accepted
time: 48ms
memory: 8876kb

input:

200000 51113
667097295 591541403 926240086 85226095 181629757 152240070 721023193 735997444 65337067...

output:

9435153122

result:

ok single line: '9435153122'

Test #9:

score: 10
Accepted
time: 25ms
memory: 8188kb

input:

200000 177
166454880 278617410 567880671 333893483 19488273 411375222 356160463 802630092 539902174 ...

output:

737190980432

result:

ok single line: '737190980432'

Test #10:

score: 10
Accepted
time: 23ms
memory: 8364kb

input:

200000 14
585315962 94718848 884602638 130460488 727305959 336131767 678306907 786520584 588410644 6...

output:

8849689714432

result:

ok single line: '8849689714432'

Extra Test:

score: 0
Extra Test Passed