Submission #68824203
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
const int kMaxN = 1.5e6 + 5, kMaxS = 2e5 + 5;
LL a[kMaxN], f[kMaxN], w[kMaxN << 2], tag[kMaxN << 2], n, s;
vector<int> pos[kMaxS];
void Init() {
for (int i = 1; i <= n; i++) {
pos[a[i]].push_back(i);
}
}
LL Nxt(LL x, int y) {
int p = x % n;
if (p >= *pos[y].rbegin()) {
return x / n * n + pos[y][0] + n;
} else {
int l = 0, r = pos[y].size() - 1;
for (int mid; l < r; p < pos[y][mid] ? r = mid : l = mid + 1) {
mid = l + r >> 1;
}
return x / n * n + pos[y][r];
}
}
LL Pre(LL x, int y) {
int p = x % n;
if (p < *pos[y].begin()) {
return x / n * n + pos[y][pos[y].size() - 1] - n;
} else {
int l = 0, r = pos[y].size() - 1;
for (int mid; l < r; p >= pos[y][mid] ? l = mid : r = mid - 1) {
mid = l + r + 1 >> 1;
}
return x / n * n + pos[y][l];
}
}
void Add(int u, LL x) {
w[u] = max(w[u], x), tag[u] = max(tag[u], x);
}
void PushDown(int u) {
if (tag[u]) {
Add(u << 1, tag[u]);
Add(u << 1 | 1, tag[u]);
tag[u] = 0;
}
}
void Update(int u, int l, int r, int L, int R, LL x) {
if (l > R || r < L) {
return;
} else if (L <= l && r <= R) {
Add(u, x);
} else {
int mid = l + r >> 1;
PushDown(u);
Update(u << 1, l, mid, L, R, x);
Update(u << 1 | 1, mid + 1, r, L, R, x);
w[u] = max(w[u << 1], w[u << 1 | 1]);
}
}
LL Query(int u, int l, int r, int L, int R) {
if (l > R || r < L) {
return 0;
} else if (L <= l && r <= R) {
return w[u];
} else {
int mid = l + r >> 1;
PushDown(u);
return max(Query(u << 1, l, mid, L, R), Query(u << 1 | 1, mid + 1, r, L, R));
}
}
void Solve(int l, int r) {
if (l == r) {
return;
} else {
int mid = l + r >> 1;
Solve(l, mid);
for (int k = 1; k <= r - l; k++) {
int len = min(r - k, mid);
int pl = max(mid + 1, (int)(lower_bound(f + l, f + len + 1, Pre(f[len], k)) - f) + k);
int pr = min(r, mid + k);
Update(1, 0, s, pl, pr, Nxt(f[len], k));
}
for (int i = mid + 1; i <= r; i++) {
f[i] = Query(1, 0, s, i, i);
}
Solve(mid + 1, r);
}
}
int main() {
ios ::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> s;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
Init();
Solve(0, s);
cout << f[s];
return 0;
}
Submission Info
| Submission Time |
|
| Task |
F - Constant Sum Subsequence |
| User |
caoshurui |
| Language |
C++ 20 (gcc 12.2) |
| Score |
1000 |
| Code Size |
2461 Byte |
| Status |
AC |
| Exec Time |
1395 ms |
| Memory |
42564 KiB |
Compile Error
Main.cpp: In function ‘LL Nxt(LL, int)’:
Main.cpp:24:15: warning: suggest parentheses around ‘+’ inside ‘>>’ [-Wparentheses]
24 | mid = l + r >> 1;
| ~~^~~
Main.cpp: In function ‘LL Pre(LL, int)’:
Main.cpp:37:19: warning: suggest parentheses around ‘+’ inside ‘>>’ [-Wparentheses]
37 | mid = l + r + 1 >> 1;
| ~~~~~~^~~
Main.cpp: In function ‘void Update(int, int, int, int, int, LL)’:
Main.cpp:61:17: warning: suggest parentheses around ‘+’ inside ‘>>’ [-Wparentheses]
61 | int mid = l + r >> 1;
| ~~^~~
Main.cpp: In function ‘LL Query(int, int, int, int, int)’:
Main.cpp:75:17: warning: suggest parentheses around ‘+’ inside ‘>>’ [-Wparentheses]
75 | int mid = l + r >> 1;
| ~~^~~
Main.cpp: In function ‘void Solve(int, int)’:
Main.cpp:85:17: warning: suggest parentheses around ‘+’ inside ‘>>’ [-Wparentheses]
85 | int mid = l + r >> 1;
| ~~^~~
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
1000 / 1000 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt |
| All |
00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt, 01-test-001.txt, 01-test-002.txt, 01-test-003.txt, 01-test-004.txt, 01-test-005.txt, 01-test-006.txt, 01-test-007.txt, 01-test-008.txt, 01-test-009.txt, 01-test-010.txt, 01-test-011.txt, 01-test-012.txt, 01-test-013.txt, 01-test-014.txt, 01-test-015.txt, 01-test-016.txt, 01-test-017.txt, 01-test-018.txt, 01-test-019.txt, 02-test-001.txt, 02-test-002.txt, 02-test-003.txt, 02-test-004.txt, 02-test-005.txt, 02-test-006.txt, 02-test-007.txt, 02-test-008.txt, 02-test-009.txt, 02-test-010.txt, 02-test-011.txt, 02-test-012.txt, 03-test-001.txt, 03-test-002.txt, 03-test-003.txt, 03-test-004.txt, 03-test-005.txt, 03-test-006.txt, 03-test-007.txt, 03-test-008.txt, 03-test-009.txt, 03-test-010.txt, 03-test-011.txt, 03-test-012.txt, 04-test-001.txt, 04-test-002.txt, 04-test-003.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 00-sample-001.txt |
AC |
2 ms |
3396 KiB |
| 00-sample-002.txt |
AC |
2 ms |
3452 KiB |
| 00-sample-003.txt |
AC |
2 ms |
3532 KiB |
| 01-test-001.txt |
AC |
1131 ms |
41592 KiB |
| 01-test-002.txt |
AC |
1150 ms |
42304 KiB |
| 01-test-003.txt |
AC |
1103 ms |
41428 KiB |
| 01-test-004.txt |
AC |
1052 ms |
41416 KiB |
| 01-test-005.txt |
AC |
1049 ms |
41348 KiB |
| 01-test-006.txt |
AC |
1042 ms |
41272 KiB |
| 01-test-007.txt |
AC |
1219 ms |
41088 KiB |
| 01-test-008.txt |
AC |
1137 ms |
41424 KiB |
| 01-test-009.txt |
AC |
1223 ms |
41764 KiB |
| 01-test-010.txt |
AC |
1247 ms |
41700 KiB |
| 01-test-011.txt |
AC |
1218 ms |
41612 KiB |
| 01-test-012.txt |
AC |
1238 ms |
41280 KiB |
| 01-test-013.txt |
AC |
661 ms |
31076 KiB |
| 01-test-014.txt |
AC |
662 ms |
31884 KiB |
| 01-test-015.txt |
AC |
645 ms |
29792 KiB |
| 01-test-016.txt |
AC |
1163 ms |
41444 KiB |
| 01-test-017.txt |
AC |
1189 ms |
42356 KiB |
| 01-test-018.txt |
AC |
1251 ms |
41948 KiB |
| 01-test-019.txt |
AC |
1214 ms |
42308 KiB |
| 02-test-001.txt |
AC |
1098 ms |
41296 KiB |
| 02-test-002.txt |
AC |
1105 ms |
41164 KiB |
| 02-test-003.txt |
AC |
1167 ms |
41428 KiB |
| 02-test-004.txt |
AC |
1150 ms |
41428 KiB |
| 02-test-005.txt |
AC |
1251 ms |
41320 KiB |
| 02-test-006.txt |
AC |
1273 ms |
41376 KiB |
| 02-test-007.txt |
AC |
1352 ms |
41232 KiB |
| 02-test-008.txt |
AC |
1321 ms |
41260 KiB |
| 02-test-009.txt |
AC |
1393 ms |
40996 KiB |
| 02-test-010.txt |
AC |
1395 ms |
40792 KiB |
| 02-test-011.txt |
AC |
1178 ms |
41360 KiB |
| 02-test-012.txt |
AC |
1154 ms |
41316 KiB |
| 03-test-001.txt |
AC |
1107 ms |
42312 KiB |
| 03-test-002.txt |
AC |
1089 ms |
42320 KiB |
| 03-test-003.txt |
AC |
1125 ms |
42428 KiB |
| 03-test-004.txt |
AC |
1119 ms |
42484 KiB |
| 03-test-005.txt |
AC |
1191 ms |
42516 KiB |
| 03-test-006.txt |
AC |
1207 ms |
42528 KiB |
| 03-test-007.txt |
AC |
1250 ms |
42452 KiB |
| 03-test-008.txt |
AC |
1294 ms |
42520 KiB |
| 03-test-009.txt |
AC |
1281 ms |
41288 KiB |
| 03-test-010.txt |
AC |
1349 ms |
41388 KiB |
| 03-test-011.txt |
AC |
1133 ms |
42564 KiB |
| 03-test-012.txt |
AC |
1134 ms |
42336 KiB |
| 04-test-001.txt |
AC |
2 ms |
3536 KiB |
| 04-test-002.txt |
AC |
2 ms |
3412 KiB |
| 04-test-003.txt |
AC |
985 ms |
41532 KiB |