QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#276510#7685. Barkley II1677118046TL 541ms221152kbC++172.3kb2023-12-05 22:13:502023-12-05 22:13:50

Judging History

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

  • [2023-12-05 22:13:50]
  • 评测
  • 测评结果:TL
  • 用时:541ms
  • 内存:221152kb
  • [2023-12-05 22:13:50]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int nn=5e5+10;
const int n2=4e7+10;
typedef long long ll;
int A[nn];
struct node{
	int lson,rson,num; //num维护区间值没出现+1,出现了更换位置 
}tree[n2];
int cnt;
int root[nn];
int build(int l,int r){
	int now=++cnt;
	tree[now].num=0;
	tree[now].lson=0;
	tree[now].rson=0;
	if(l==r)return now;
	int mid=(l+r)/2;
	tree[now].lson=build(l,mid);
	tree[now].rson=build(mid+1,r);
	return now;
}
int update(int l,int r,int pos,int pre,int val){//只修改一个故不用更新 
	int now=++cnt;
	tree[now]=tree[pre];
	tree[now].num+=val;
	if(l==r){
		return now;	
	}
	int mid=(l+r)/2;
	if(pos<=mid){
		tree[now].lson=update(l,mid,pos,tree[pre].lson,val);
	}else{
		tree[now].rson=update(mid+1,r,pos,tree[pre].rson,val);
	}
	return now;
}
int query(int l,int r,int now,int pos){//pos这里表示截止位置,每一个now表示一个R,在R的情况下搜pos即为l,大于等于l的位置里的和都加起来
	if(l==r){
		if(l!=pos)return 0;
		return tree[now].num;
	}
	int mid=(l+r)/2;
	if(mid>=pos){
		return query(l,mid,tree[now].lson,pos)+tree[tree[now].rson].num;
	}else{
		return query(mid+1,r,tree[now].rson,pos);
	}
}
int n,t,m;
map<ll,ll>vis;
int len;vector<int>XX[nn];
void init(){
	cnt=0;
	cin>>n>>m;
	vis.clear();
	for(int i=1;i<=m+1;i++)XX[i].clear();
	for(int i=1;i<=n;i++){
		cin>>A[i];
	}
	root[0]=build(1,n);
	for(int i=1;i<=n;i++){
		if(!vis.count(A[i])){
			root[i]=update(1,n,i,root[i-1],1);
			vis[A[i]]=i;
		}else{
			int pre=vis[A[i]];
			vis[A[i]]=i;
			root[i]=update(1,n,pre,root[i-1],-1);
			root[i]=update(1,n,i,root[i],1);
		}
	}
}

void solve(){
	init();
	for(int i=1;i<=n;i++){
		XX[A[i]].push_back(i);
	}
	int an=-1e9+10;
	for(int i=1;i<=m+1;i++){
		if(XX[i].empty()){
			an=max(an,query(1,n,root[n],1)-i);
			break;
		}else{
			int sz=XX[i].size();
			for(int j=0;j<sz;j++){
				//方向统一向右 
				if(j==0){//考虑左边部分
					an=max(an,query(1,n,root[XX[i][j]-1],1)-i);
				}
				if(j!=sz-1){
					an=max(an,query(1,n,root[XX[i][j+1]-1],XX[i][j]+1)-i);
				}else{
					an=max(an,query(1,n,root[n],XX[i][j]+1)-i);
				}
			}
		}
	}
	cout<<an<<"\n";
}
int main()
{
	ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
	cin>>t;
	while(t--)
	solve();
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 5ms
memory: 21328kb

input:

2
5 4
1 2 2 3 4
5 10000
5 2 3 4 1

output:

2
3

result:

ok 2 number(s): "2 3"

Test #2:

score: 0
Accepted
time: 70ms
memory: 20776kb

input:

50000
10 19
12 6 1 12 11 15 4 1 13 18
10 8
8 7 6 7 6 2 2 3 4 8
10 6
3 2 6 6 5 2 3 4 5 6
10 11
6 3 7 9 2 1 2 10 10 4
10 6
6 1 2 6 1 1 3 4 2 1
10 9
8 5 3 9 1 7 5 5 1 1
10 5
1 4 3 2 5 4 5 3 5 2
10 14
3 8 12 10 4 2 3 13 7 3
10 14
5 5 12 2 8 1 13 9 8 5
10 7
5 5 6 6 1 5 3 7 3 4
10 7
5 1 4 6 1 6 4 3 7 5
10...

output:

6
5
4
4
2
4
3
7
4
4
4
5
2
3
6
6
7
5
7
6
5
5
6
2
6
8
7
2
5
5
6
2
2
3
4
5
3
3
7
3
2
5
6
1
3
5
3
3
3
8
6
6
5
7
4
4
5
4
6
6
6
3
7
3
6
3
3
7
7
6
6
7
4
3
3
4
4
6
3
4
6
6
4
5
5
9
4
5
7
5
3
5
2
2
5
6
6
8
4
3
4
5
5
5
7
7
3
2
6
5
3
5
4
4
5
6
6
5
6
7
7
4
5
7
4
7
3
7
6
6
6
5
4
2
5
4
2
3
6
5
2
6
5
5
4
3
5
6
6
6
...

result:

ok 50000 numbers

Test #3:

score: 0
Accepted
time: 59ms
memory: 20480kb

input:

100000
5 4
4 3 1 3 1
5 4
2 2 1 3 4
5 9
7 8 7 1 3
5 3
3 2 2 3 1
5 7
1 4 2 4 7
5 4
4 4 4 2 3
5 3
2 1 2 2 2
5 5
2 1 2 5 4
5 9
1 8 4 4 7
5 6
2 6 4 6 2
5 5
1 2 4 4 4
5 3
2 1 1 1 3
5 5
5 4 5 2 5
5 4
3 3 3 2 1
5 3
3 1 3 2 3
5 7
1 5 2 2 7
5 6
2 2 6 5 6
5 10
6 3 3 1 7
5 8
1 6 8 4 3
5 4
1 2 1 3 3
5 7
2 2 4 3 ...

output:

1
1
2
1
2
2
0
2
2
2
1
0
2
1
1
2
2
2
3
0
3
1
2
2
3
3
1
3
0
0
3
2
2
0
2
2
1
0
2
2
3
3
3
1
3
2
2
3
2
3
2
1
2
3
1
3
3
1
2
3
1
1
2
2
2
2
0
1
0
1
0
2
1
3
0
2
2
3
2
2
1
3
1
3
1
1
1
3
1
1
4
0
1
3
2
2
2
0
3
2
4
3
3
2
1
0
4
4
3
2
1
2
1
2
3
2
3
4
4
3
0
0
1
4
1
3
3
2
3
1
3
4
3
1
2
2
3
2
3
2
3
3
1
3
1
1
4
1
1
3
...

result:

ok 100000 numbers

Test #4:

score: 0
Accepted
time: 76ms
memory: 20588kb

input:

25000
20 28
4 28 8 7 8 23 13 27 1 3 24 19 21 7 21 6 10 3 1 8
20 18
6 13 17 2 4 11 12 5 10 8 1 3 5 18 10 2 8 15 4 17
20 17
5 9 5 15 7 11 16 2 16 17 15 11 3 12 13 12 11 17 15 14
20 28
12 17 26 1 21 18 9 12 22 3 7 24 5 8 20 3 25 28 17 20
20 13
9 10 4 9 10 13 4 3 3 9 12 8 4 12 2 2 6 10 13 5
20 22
17 13 ...

output:

12
9
11
14
9
12
9
15
6
11
8
13
14
13
7
11
8
13
11
11
14
14
7
15
10
10
10
12
9
13
12
10
10
14
14
11
9
8
9
10
10
5
11
14
13
14
13
8
8
12
10
10
17
12
7
14
9
11
14
13
8
12
15
13
14
11
9
8
11
17
9
12
11
13
13
10
14
10
10
16
12
13
12
11
14
12
9
12
5
9
15
16
13
15
7
14
12
6
12
13
7
8
12
10
13
15
9
16
7
16
...

result:

ok 25000 numbers

Test #5:

score: 0
Accepted
time: 103ms
memory: 20984kb

input:

5000
100 100
71 48 44 27 73 73 90 42 69 81 79 99 97 3 45 78 38 92 89 27 97 7 4 91 42 59 7 45 88 100 15 66 64 6 26 54 38 38 72 81 15 94 35 63 33 85 100 16 41 5 71 20 92 36 39 59 19 59 11 22 11 26 94 29 73 98 16 16 47 25 35 50 49 6 67 85 69 90 6 87 72 24 37 62 55 54 25 38 95 14 15 26 89 26 25 46 14 24...

output:

59
78
69
48
78
53
64
73
53
66
59
57
62
42
73
69
46
68
66
47
59
64
71
57
73
43
52
66
67
61
66
66
65
58
80
65
65
69
75
76
69
39
69
61
53
72
44
62
63
71
76
56
69
79
49
73
62
71
83
59
70
53
69
73
47
68
74
59
66
74
75
61
53
76
48
62
79
71
47
72
40
80
62
42
63
70
72
70
70
59
68
56
74
54
61
78
68
75
70
39
...

result:

ok 5000 numbers

Test #6:

score: 0
Accepted
time: 483ms
memory: 130348kb

input:

2
250000 144237
103523 38477 80037 110169 8464 110583 60349 74339 29012 8989 96955 23403 38383 12186 107503 109176 1709 31839 109579 62912 130470 26082 102718 25272 17893 55607 48053 34513 23154 136492 8313 136454 57920 60639 68601 50656 16871 101625 88777 35367 62644 80269 24346 33961 74832 62520 8...

output:

118705
195099

result:

ok 2 number(s): "118705 195099"

Test #7:

score: 0
Accepted
time: 541ms
memory: 221152kb

input:

1
500000 500000
166333 42890 491246 340568 331305 268296 201428 53022 200493 362616 82079 492836 402998 214609 161141 471977 378791 107806 182516 265636 468917 104158 490409 221339 116329 325539 49370 262861 37122 78932 236317 431273 76912 177034 393086 455348 481306 290838 435357 444359 465017 1894...

output:

315937

result:

ok 1 number(s): "315937"

Test #8:

score: -100
Time Limit Exceeded

input:

50000
10 359848
3 7 9 4 5 2 8 10 1 6
10 418109
5 3 9 4 8 10 6 2 1 7
10 218272
3 4 6 5 2 1 9 10 8 7
10 35311
10 8 7 3 9 2 1 6 5 4
10 82600
4 10 6 9 7 5 2 1 3 8
10 265069
10 5 3 2 9 4 1 8 7 6
10 105624
7 2 3 1 9 10 5 8 4 6
10 440218
10 5 3 6 9 4 1 8 7 2
10 444968
1 2 4 7 5 10 3 9 8 6
10 199453
7 10 1 ...

output:

7
7
6
5
6
5
6
7
8
6
7
4
7
5
7
6
8
8
6
6
7
8
5
7
6
6
5
6
7
4
6
6
6
5
7
7
8
6
7
8
8
7
5
4
6
5
5
8
8
7
7
7
6
5
7
6
7
7
5
7
7
6
8
8
5
7
5
7
7
5
7
6
8
6
6
5
8
7
7
8
7
7
5
5
8
8
7
6
8
5
5
7
8
6
5
8
4
7
5
7
6
7
5
7
7
6
8
7
7
7
8
5
6
7
7
6
8
7
7
7
6
7
6
6
5
6
7
7
7
7
6
5
6
5
8
8
6
7
7
5
7
8
5
6
4
8
7
6
7
8
...

result: