QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#471913 | #1281. Longest Common Subsequence | _log_ | AC ✓ | 115ms | 99556kb | C++14 | 2.4kb | 2024-07-11 11:27:05 | 2024-07-11 11:27:06 |
Judging History
answer
# include <bits/stdc++.h>
# define rep(i, j, k) for(int i = j; i <= k; ++i)
# define per(i, j, k) for(int i = j; i >= k; --i)
# define go(u) for(int i = head[u], v; v = to[i], w = W[i], i; i = nxt[i])
# define maxn 1001000
using namespace std;
int T, n, m, ans, c1, c3;
int a[maxn], b[maxn], la[maxn], ra[maxn], lb[maxn], rb[maxn], suma[maxn], sumb[maxn], pos[maxn], cnt[2][4];
namespace BIT {
# define f(x) (x + maxn)
# define lowbit(x) (x & -x)
int Max[2][maxn << 3];
inline void update(int pos, int x, int t) {while(pos <= f(max(n, m))) Max[t][pos] = max(Max[t][pos], x), pos += lowbit(pos);}
inline void clear(int pos, int t) {while(pos <= f(max(n, m))) Max[t][pos] = -0x3f3f3f3f, pos += lowbit(pos);}
inline int query(int pos, int t) {int Max1 = -2e9; while(pos) Max1 = max(Max1, Max[t][pos]), pos -= lowbit(pos); return Max1;}
inline void init() {rep(i, f(-max(n, m)), f(max(n, m))) clear(i, 0), clear(i, 1);}
} using namespace BIT;
signed main(){
// freopen("sequence.in", "r", stdin);
// freopen("sequence.out", "w", stdout);
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> T; memset(Max, -0x3f, sizeof(Max));
while(T--) {
init(); cin >> n >> m; ans = 0; memset(cnt, 0, sizeof(cnt));
rep(i, 1, n) {
cin >> a[i]; suma[i] = suma[i - 1] + (a[i] == 2);
if(a[i] == 1) la[++cnt[0][1]] = i;
}
rep(i, 1, m) {
cin >> b[i]; sumb[i] = sumb[i - 1] + (b[i] == 2);
if(b[i] == 1) lb[++cnt[1][1]] = i;
}
per(i, n, 1) if(a[i] == 3) ra[++cnt[0][3]] = i;
per(i, m, 1) if(b[i] == 3) rb[++cnt[1][3]] = i;
c1 = min(cnt[0][1], cnt[1][1]), c3 = min(cnt[0][3], cnt[1][3]); ra[0] = n + 1, rb[0] = m + 1;
for(int i = c1, j = 0; j <= c3; ++j) {while(la[i] >= ra[j] || lb[i] >= rb[j]) i--; pos[j] = i;} pos[c3 + 1] = -1;
per(j, c3, 0) {
rep(i, pos[j + 1] + 1, pos[j]) {
update(f(suma[la[i]] - sumb[lb[i]]), i - sumb[lb[i]], 0);
update(f(sumb[lb[i]] - suma[la[i]]), i - suma[la[i]], 1);
}
ans = max(ans, query(f(suma[ra[j] - 1] - sumb[rb[j] - 1]), 0) + j + sumb[rb[j] - 1]);
ans = max(ans, query(f(sumb[rb[j] - 1] - suma[ra[j] - 1]), 1) + j + suma[ra[j] - 1]);
}
cout << ans << '\n';
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 3ms
memory: 79664kb
input:
3 3 3 1 2 3 1 2 3 3 3 1 1 1 1 1 2 3 3 1 3 2 1 2 3
output:
3 2 2
result:
ok 3 tokens
Test #2:
score: 0
Accepted
time: 114ms
memory: 77028kb
input:
139889 1 10 2 2 1 2 2 3 1 1 2 3 3 7 1 3 2 3 3 1 1 2 2 6 1 2 1 3 1 1 1 1 8 7 3 1 3 3 2 2 3 1 3 2 2 1 3 3 3 10 3 3 2 1 1 2 2 1 1 1 1 3 1 1 5 2 1 2 1 3 1 1 2 1 4 1 3 3 3 3 7 2 3 1 2 1 2 2 3 3 2 6 2 3 1 1 2 1 3 1 3 1 4 1 3 1 1 3 4 2 2 3 2 3 1 3 1 8 1 1 1 3 1 3 3 3 1 4 1 1 3 3 3 1 10 10 3 1 2 1 2 2 2 2 1...
output:
1 1 1 4 2 2 0 1 2 1 1 1 1 6 1 0 1 2 2 3 4 4 1 1 1 0 2 2 3 4 4 1 1 3 2 1 2 1 3 1 1 1 3 1 1 2 3 2 1 3 1 4 1 2 2 1 3 1 1 2 3 1 2 4 4 2 2 1 1 1 2 4 3 2 1 1 2 3 1 2 2 1 5 2 4 2 1 2 3 2 5 2 1 3 1 3 1 2 1 2 2 4 3 2 0 1 1 3 2 3 2 2 0 0 2 3 1 2 0 4 1 4 1 1 3 1 1 0 1 1 1 1 3 2 2 2 3 3 3 1 2 2 3 2 1 1 3 3 2 3 ...
result:
ok 139889 tokens
Test #3:
score: 0
Accepted
time: 107ms
memory: 80316kb
input:
100000 10 10 1 1 1 3 1 2 1 1 1 1 3 1 1 2 1 2 2 2 1 3 10 10 1 1 3 2 3 1 1 2 3 2 3 3 1 3 2 1 1 1 2 1 10 10 2 2 3 3 1 2 3 1 3 2 2 3 2 3 2 1 2 3 3 1 10 10 3 3 1 1 1 3 2 3 2 2 2 2 1 2 2 2 2 2 3 3 10 10 3 3 3 2 1 3 3 1 3 1 1 3 1 1 3 2 1 1 1 3 10 10 1 1 2 1 3 1 1 3 1 3 2 1 1 1 1 3 2 1 2 2 10 10 2 2 3 1 2 2...
output:
4 5 5 4 4 5 4 5 4 7 4 5 5 4 4 5 4 6 6 6 3 4 4 4 5 4 4 4 6 4 5 5 5 3 5 6 5 4 4 4 4 5 5 3 4 4 3 7 3 4 5 4 4 4 3 5 5 5 4 6 5 3 5 5 3 3 3 5 3 4 4 5 4 4 3 4 5 6 5 6 7 5 4 5 4 4 6 5 4 5 6 5 4 3 3 4 3 4 4 4 4 4 5 4 5 5 5 4 2 6 3 5 5 5 5 4 4 4 4 4 5 5 4 4 5 6 5 4 3 4 4 4 3 4 3 3 4 5 5 3 4 6 4 3 4 5 6 5 5 5 ...
result:
ok 100000 tokens
Test #4:
score: 0
Accepted
time: 89ms
memory: 80272kb
input:
59509 16 16 3 3 3 2 3 3 1 3 1 2 1 1 3 1 3 2 3 3 3 1 1 3 1 1 2 2 2 2 3 3 1 1 16 17 2 1 1 1 3 1 1 2 3 3 2 1 2 3 3 3 1 1 3 1 1 1 1 1 1 3 2 3 2 1 3 1 3 19 10 1 1 3 3 2 1 1 2 3 1 2 3 3 1 3 1 2 1 1 3 1 1 3 1 1 1 2 2 1 10 14 3 3 3 1 1 3 3 1 3 1 3 1 3 2 2 3 3 1 1 3 1 3 3 3 12 20 1 1 2 2 1 1 2 1 1 2 3 1 1 1 ...
output:
6 10 7 6 8 4 6 6 7 6 6 7 5 8 8 5 8 5 8 5 5 7 6 5 5 7 6 6 8 7 5 6 6 4 7 7 6 5 7 7 7 9 5 5 8 9 7 7 6 11 8 5 7 9 6 7 8 5 5 6 6 8 8 6 9 8 4 6 7 8 7 5 8 4 5 6 8 8 5 6 6 7 7 8 5 6 7 6 7 5 10 10 6 6 8 6 6 7 5 7 5 6 6 7 3 6 10 5 6 7 7 8 7 4 4 5 7 5 7 7 6 5 6 8 6 8 6 6 7 7 8 4 4 6 7 6 5 5 6 7 8 9 6 8 7 9 8 8...
result:
ok 59509 tokens
Test #5:
score: 0
Accepted
time: 100ms
memory: 79628kb
input:
50000 20 20 1 3 3 2 1 2 1 1 1 2 3 2 1 2 2 2 2 2 1 3 3 2 2 1 3 3 1 2 3 2 1 2 2 3 2 3 1 3 2 1 20 20 1 3 2 3 2 2 1 1 1 3 3 2 2 2 3 3 3 3 3 1 2 3 2 3 1 2 1 2 2 2 1 3 1 3 1 2 3 2 3 1 20 20 1 3 1 1 2 3 1 2 2 3 3 1 2 1 1 1 2 2 1 2 2 1 1 2 2 2 1 1 1 3 1 1 3 1 2 1 2 2 3 1 20 20 3 3 3 2 1 2 2 2 1 2 2 2 2 2 3 ...
output:
8 10 11 8 7 8 9 9 9 8 7 9 9 8 8 10 8 8 10 9 8 8 8 10 9 8 9 9 8 7 5 7 8 7 9 9 9 7 10 11 12 12 8 10 11 10 9 9 10 8 8 8 9 10 8 9 9 10 9 8 8 8 10 8 9 11 9 6 9 6 9 8 8 11 9 10 9 8 8 9 10 9 9 7 9 9 9 8 9 11 6 8 8 8 8 9 9 8 9 7 8 7 6 8 10 9 9 10 8 9 8 9 11 9 8 7 8 8 10 11 6 8 9 9 8 7 9 9 10 9 7 10 8 9 9 8 ...
result:
ok 50000 tokens
Test #6:
score: 0
Accepted
time: 94ms
memory: 79996kb
input:
11967 85 68 1 2 2 2 1 3 3 1 3 3 1 2 2 1 1 2 1 2 1 3 2 2 3 2 3 1 2 3 1 2 3 2 1 1 2 1 3 1 2 3 2 1 2 2 1 2 3 2 2 1 1 1 3 2 2 2 2 3 2 1 3 3 1 3 2 3 1 2 3 2 1 2 1 3 2 3 3 2 2 3 2 2 1 1 2 1 3 3 1 2 1 1 1 2 1 2 3 1 1 3 2 1 3 3 1 1 3 1 1 3 2 2 1 2 1 1 2 3 3 2 1 2 2 3 2 1 2 3 1 3 3 3 1 3 1 3 1 3 3 1 1 3 1 2 ...
output:
32 29 25 37 25 29 22 27 31 31 22 22 31 37 23 29 27 29 22 31 26 30 25 28 26 27 24 26 25 25 28 30 23 33 33 24 21 29 23 35 26 36 26 23 24 33 31 28 25 22 31 35 32 35 26 25 30 35 28 36 27 25 25 28 33 26 30 27 23 35 32 36 30 28 26 30 31 33 28 24 33 36 21 30 33 33 29 29 22 22 29 27 20 38 29 31 30 35 34 39 ...
result:
ok 11967 tokens
Test #7:
score: 0
Accepted
time: 97ms
memory: 79132kb
input:
10000 100 100 2 3 2 2 2 3 2 3 1 1 2 2 2 2 1 2 3 3 3 2 3 3 1 3 3 2 2 3 1 1 3 3 2 3 1 3 3 1 2 2 2 3 1 2 3 1 2 2 3 3 1 1 3 1 3 1 2 2 2 2 2 3 2 1 3 1 2 2 1 2 1 2 1 2 3 2 3 1 3 2 2 1 2 1 2 3 1 3 2 1 3 3 2 2 1 1 3 1 1 2 3 1 1 2 1 1 1 3 3 2 3 3 3 2 1 3 3 2 2 2 1 3 1 3 1 3 1 2 2 1 1 2 3 2 3 3 2 1 3 2 3 3 3 ...
output:
38 40 34 35 39 40 38 40 39 39 36 38 42 41 39 37 42 43 35 37 36 34 39 40 41 40 33 36 38 38 42 38 40 42 44 42 35 41 35 44 39 45 36 37 39 38 40 40 35 37 39 39 40 43 42 37 41 41 39 44 43 35 40 41 37 40 39 39 36 38 40 39 38 39 37 35 40 40 41 38 36 42 41 38 38 38 34 43 37 36 40 39 41 46 38 42 40 37 47 39 ...
result:
ok 10000 tokens
Test #8:
score: 0
Accepted
time: 98ms
memory: 80296kb
input:
1000 1000 1000 3 1 3 3 3 2 3 1 3 2 1 1 3 1 2 2 3 3 1 2 2 3 3 3 3 1 3 3 3 1 1 2 2 1 1 2 1 2 2 2 1 3 1 3 1 1 1 2 3 1 3 1 3 1 1 2 1 1 1 3 1 2 1 1 2 3 2 2 2 1 1 2 2 1 2 2 3 3 2 1 1 2 2 3 1 3 2 1 2 3 3 1 3 2 2 3 2 1 1 3 3 3 1 3 1 2 2 3 1 3 3 3 1 3 2 3 2 3 2 1 2 1 1 1 1 3 1 3 1 2 3 3 1 1 3 3 2 3 3 2 1 1 3...
output:
366 357 362 343 351 343 357 344 343 357 343 348 353 354 358 346 349 357 347 357 344 349 353 356 354 358 350 361 356 342 353 362 350 350 351 353 364 355 355 361 348 349 354 354 347 345 346 361 349 338 360 344 353 339 351 344 343 352 345 354 335 359 355 351 350 355 354 342 347 347 356 358 364 356 351 ...
result:
ok 1000 tokens
Test #9:
score: 0
Accepted
time: 115ms
memory: 79956kb
input:
100 10000 10000 2 2 2 3 2 3 3 2 2 1 1 1 3 3 2 3 2 3 1 2 1 2 2 1 3 2 1 3 1 3 3 2 2 2 2 2 1 3 3 3 2 3 1 3 3 3 2 1 1 2 2 1 2 1 1 3 1 2 3 1 1 3 3 2 1 3 2 2 2 3 3 3 1 2 2 1 3 1 1 3 3 1 3 2 2 2 2 2 1 1 1 2 3 2 2 1 2 2 1 2 3 3 2 3 3 3 1 3 1 3 3 3 2 1 1 2 1 3 1 3 2 2 1 1 2 1 3 3 2 3 3 3 1 2 2 1 3 2 1 3 2 1 ...
output:
3431 3388 3380 3406 3403 3366 3399 3389 3390 3374 3389 3356 3419 3423 3348 3392 3366 3392 3411 3398 3436 3429 3371 3410 3414 3366 3377 3406 3384 3391 3391 3421 3400 3409 3412 3407 3429 3405 3444 3381 3414 3398 3437 3390 3381 3397 3396 3399 3412 3382 3403 3368 3393 3445 3410 3396 3393 3430 3416 3391 ...
result:
ok 100 tokens
Test #10:
score: 0
Accepted
time: 113ms
memory: 82920kb
input:
10 100000 100000 3 1 2 2 1 1 1 3 2 3 1 3 3 1 2 3 1 2 3 3 3 2 3 3 3 3 2 1 1 3 3 1 1 2 3 1 2 3 1 2 2 2 3 3 2 1 1 3 3 1 2 3 3 2 3 3 3 3 1 2 1 3 1 3 3 2 2 2 3 3 3 2 1 1 2 1 3 1 3 2 3 3 3 3 2 3 1 2 2 2 2 3 2 3 1 3 3 1 3 3 1 1 3 2 1 3 1 3 3 3 3 3 2 1 1 2 2 3 1 3 2 3 3 3 2 2 3 1 3 2 1 3 1 2 3 2 2 1 3 3 2 1...
output:
33573 33651 33656 33615 33599 33519 33490 33488 33510 33572
result:
ok 10 tokens
Test #11:
score: 0
Accepted
time: 79ms
memory: 93928kb
input:
1 1000000 1000000 1 3 2 3 1 1 2 2 2 1 2 1 3 1 1 2 2 3 2 1 3 1 1 1 3 2 2 1 1 1 2 1 2 3 3 1 2 1 2 3 3 2 1 1 1 1 1 2 2 3 2 3 2 1 3 3 1 2 2 3 1 3 3 3 2 3 2 1 2 1 2 3 2 2 1 1 1 3 1 3 2 1 1 3 1 1 2 1 1 3 3 2 1 2 3 3 3 2 1 3 3 2 3 1 1 1 1 3 3 2 3 2 1 1 2 1 3 3 3 3 3 3 2 3 1 3 2 1 2 3 1 2 3 2 2 3 3 1 1 1 1 ...
output:
333799
result:
ok "333799"
Test #12:
score: 0
Accepted
time: 100ms
memory: 99556kb
input:
1 1000000 1000000 2 1 2 1 1 3 1 3 2 2 2 2 1 3 2 2 2 3 2 1 3 3 3 2 3 1 1 1 3 2 3 2 1 1 3 1 3 2 2 3 1 1 2 3 1 1 1 2 3 3 2 1 2 2 2 3 1 2 2 3 1 2 2 1 3 2 2 1 1 2 1 1 2 1 2 1 2 2 3 1 3 3 3 2 1 1 1 1 1 1 3 1 3 1 2 1 3 3 2 3 1 1 2 1 1 1 1 1 2 2 1 1 2 3 1 3 2 3 3 3 3 1 3 1 3 1 3 1 3 2 2 2 3 3 3 2 1 3 3 3 3 ...
output:
334219
result:
ok "334219"
Test #13:
score: 0
Accepted
time: 99ms
memory: 99456kb
input:
1 1000000 1000000 1 2 2 2 2 1 3 3 3 2 1 1 3 3 1 2 3 1 2 1 2 3 2 3 1 2 1 2 1 1 2 1 1 3 2 1 1 1 2 3 2 1 1 1 1 3 3 2 3 3 1 3 1 3 3 2 1 2 3 1 2 3 2 3 2 3 2 2 3 1 3 2 2 3 3 1 1 1 3 2 2 1 2 3 1 1 1 1 1 3 1 3 1 3 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 3 1 1 1 3 2 1 1 1 2 3 3 3 3 2 3 2 1 1 3 1 3 2 2 1 1 3 3 1 1 3 ...
output:
333870
result:
ok "333870"
Test #14:
score: 0
Accepted
time: 96ms
memory: 97728kb
input:
1 1000000 1000000 1 1 2 3 3 3 1 1 1 1 1 3 2 3 3 1 2 3 2 1 2 3 1 3 3 1 2 2 1 2 2 2 1 1 3 2 2 3 3 3 2 1 2 2 1 1 2 2 1 3 3 1 3 3 1 1 3 2 3 2 2 2 1 1 3 1 2 2 3 3 3 3 1 3 3 1 2 3 2 1 2 1 3 1 3 2 1 2 1 3 1 1 1 2 3 2 2 1 3 1 3 3 3 2 1 2 1 2 1 2 3 3 3 1 3 1 1 2 2 3 1 1 1 2 1 1 3 2 1 1 3 3 2 2 1 3 1 2 2 2 2 ...
output:
334023
result:
ok "334023"
Test #15:
score: 0
Accepted
time: 92ms
memory: 94324kb
input:
1 1000000 1000000 2 2 3 1 3 2 3 2 2 3 3 2 3 3 1 1 1 3 3 1 2 2 3 1 1 2 1 3 3 3 1 1 1 2 1 2 3 1 1 3 3 3 3 3 1 3 3 1 2 1 1 3 2 1 2 3 3 2 3 2 3 3 1 2 3 3 3 3 2 1 2 1 1 2 1 3 2 2 3 3 3 1 2 2 3 2 3 3 2 2 1 3 3 1 2 1 2 1 1 2 2 1 1 3 2 3 3 2 3 2 1 2 1 2 2 3 3 2 3 2 1 2 1 3 2 3 1 2 2 2 1 1 3 1 2 2 1 1 1 1 1 ...
output:
334141
result:
ok "334141"