QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#431689#1281. Longest Common Subsequencechenxinyang2006AC ✓151ms38964kbC++202.6kb2024-06-05 22:06:242024-06-05 22:06:24

Judging History

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

  • [2024-06-05 22:06:24]
  • 评测
  • 测评结果:AC
  • 用时:151ms
  • 内存:38964kb
  • [2024-06-05 22:06:24]
  • 提交

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 uint unsigned int
#define ll long long
#define ull unsigned long long
#define db double
#define ldb long double
#define pii pair<int,int>
#define pll pair<ll,ll>
#define mkp make_pair
#define eb emplace_back
#define SZ(S) (int)S.size()
//#define mod 998244353
//#define mod 1000000007
#define inf 0x3f3f3f3f
#define linf 0x3f3f3f3f3f3f3f3f
using namespace std;

template <class T>
void chkmax(T &x,T y){
	if(x < y) x = y;
}

template <class T>
void chkmin(T &x,T y){
	if(x > y) x = y;
}

inline int popcnt(int x){
	return __builtin_popcount(x);
}

inline int ctz(int x){
	return __builtin_ctz(x);
}


/*ll power(ll p,int k = mod - 2){
	ll ans = 1;
	while(k){
		if(k % 2 == 1) ans = ans * p % mod;
		p = p * p % mod;
		k /= 2;	
	}
	return ans;
}*/
int T,n,m,p,q;
int A[1000005],B[1000005],sum[2][1000005];

int tree[1000005];
#define lowbit(x) (x & (-x))
void upd(int pos,int C){//pos \in [0,n]
	pos = n + 1 - pos;
	while(pos <= n + 1){
		chkmax(tree[pos],C);
		pos += lowbit(pos);
	}
}
int qry(int pos){//>= pos query max
	pos = n + 1 - pos;
	chkmin(pos,n + 1);
	int ret = 0;
	while(pos){
		chkmax(ret,tree[pos]);
		pos -= lowbit(pos);
	}
	return ret;
}
int a[1000005],b[1000005],c[1000005],d[1000005];
int test(int i,int ans){
	return i + qry(ans + sum[0][a[i]] - i) - sum[1][c[i]] >= ans;
}

void solve(){
	scanf("%d%d",&n,&m);
	rep(i,1,n){
		scanf("%d",&A[i]);
		sum[0][i] = sum[0][i - 1] + (A[i] == 2);
	}
	rep(i,1,m){
		scanf("%d",&B[i]);
		sum[1][i] = sum[1][i - 1] + (B[i] == 2);
	}

	p = q = 0;
	int j1 = 1,j2 = 1;
	a[0] = c[0] = 0;
	rep(i,1,n){
		while(j1 <= n && A[j1] != 1) j1++;
		while(j2 <= m && B[j2] != 1) j2++;
		if(j1 > n || j2 > m) break;
		++p;
		a[p] = j1;c[p] = j2;
		j1++;j2++;
	}
	j1 = n;j2 = m;
	rep(i,1,n){
		while(j1 >= 1 && A[j1] != 3) j1--;
		while(j2 >= 1 && B[j2] != 3) j2--;
		if(!j1 || !j2) break;
		++q;
		b[q] = j1;d[q] = j2;
		j1--;j2--;
	}
	b[0] = n + 1;d[0] = m + 1;

/*	printf("(a,c)\n");
	rep(i,0,p) printf("%d %d\n",a[i],c[i]);
	printf("(b,d)\n");
	rep(i,0,q) printf("%d %d\n",b[i],d[i]);*/
	fill(tree,tree + n + 2,-inf);
	int answer = 0;
	int j = -1;
	per(i,p,0){
		while(j + 1 <= q && b[j + 1] >= a[i] && d[j + 1] >= c[i]){
			j++;
			upd(j + sum[0][b[j] - 1],j + sum[1][d[j] - 1]);
		}
		while(test(i,answer + 1)) answer++;
	}
	printf("%d\n",answer);
}

int main(){
//	freopen("test.in","r",stdin);
	scanf("%d",&T);
	while(T--) solve();
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 16196kb

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: 105ms
memory: 16016kb

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: 119ms
memory: 16180kb

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: 108ms
memory: 16128kb

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: 112ms
memory: 16056kb

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: 16108kb

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: 114ms
memory: 16112kb

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: 106ms
memory: 16032kb

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: 101ms
memory: 16132kb

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: 106ms
memory: 19080kb

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: 113ms
memory: 32840kb

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: 110ms
memory: 38260kb

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: 110ms
memory: 38964kb

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: 107ms
memory: 34864kb

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: 151ms
memory: 38328kb

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"