UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#160871#46. deletemikefeng100421ms12976kbC++1.1kb2022-10-04 20:36:262022-10-04 20:36:27

answer

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=1e6+5;
int n,k,maxn,ans;
struct node{
	int x,id;
}a[N];
bool cmp(node a,node b){
	return a.x<b.x;
}
int f[N];
int tree[N];
int lowbit(int x){
	return x&(-x);
}
void add(int u,int val){
	if(!u){
		maxn=max(maxn,val);
		return;
	}
	for(int i=u;i<=n;i+=lowbit(i)) tree[i]=max(tree[i],val);
}
int query(int u){
	int ans=0;
	for(int i=u;i;i-=lowbit(i)) ans=max(ans,tree[i]);
	return ans;
}
int read(){
	int x=0;
	char c=getchar();
	while(c<'0'||c>'9') c=getchar();
	while(c>='0'&&c<='9'){
		x=x*10+c-48;
		c=getchar();
	}
	return x;
}
int main(){
	n=read();k=read();
	for(int i=1;i<=n;i++){
		a[i].x=read();
		a[i].id=i;
	}
	sort(a+1,a+n+1,cmp);
	int now=1;
	for(int i=1;i<=n;i++){
		if(a[i].id-a[i].x<0) continue;
		if(i!=1&&a[i].x!=a[i-1].x){
			while(now<i){
				if(a[now].id-a[now].x>=0) add(a[now].id-a[now].x,f[now]);
				now++;
			}
		}
		int tmp=max(maxn,query(a[i].id-a[i].x));
		f[i]=tmp+1;
		if(a[i].id-a[i].x<=k&&k<=n-a[i].x) ans=max(ans,f[i]);
	}
	cout<<ans<<endl;
	return 0;
}

详细

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

Test #1:

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

input:

20 8
11 9 10 2 4 8 7 4 9 8 12 1 3 12 7 9 9 16 3 15

output:

4

result:

ok single line: '4'

Test #2:

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

input:

20 10
1 12 11 1 2 7 10 2 13 4 11 14 8 15 4 6 1 3 5 12

output:

4

result:

ok single line: '4'

Test #3:

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

input:

500 150
7 2 11 5 1 13 10 10 14 20 20 2 5 17 14 4 5 5 3 2 2 7 10 3 18 2 7 3 5 15 2 8 5 14 3 1 1 4 19 ...

output:

27

result:

ok single line: '27'

Test #4:

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

input:

500 233
8 16 14 3 7 1 14 15 11 8 4 11 13 6 5 18 2 11 10 5 7 3 14 2 7 16 6 5 14 1 13 6 9 7 9 5 5 6 2 ...

output:

26

result:

ok single line: '26'

Test #5:

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

input:

5000 1666
15 23 11 4 10 16 24 9 10 10 9 14 7 3 1 22 4 8 7 18 3 24 19 6 2 16 2 5 7 10 6 12 1 6 18 9 6...

output:

120

result:

ok single line: '120'

Test #6:

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

input:

5000 2333
2 28 15 6 10 2 10 10 26 7 8 16 3 1 15 17 11 7 8 2 8 2 6 3 4 13 6 20 13 18 3 6 24 1 5 26 18...

output:

120

result:

ok single line: '120'

Test #7:

score: 10
Accepted
time: 18ms
memory: 2376kb

input:

100000 23333
158 127 191 174 144 43 80 135 48 54 91 22 135 145 32 109 180 16 51 47 86 69 26 121 161 ...

output:

596

result:

ok single line: '596'

Test #8:

score: 10
Accepted
time: 18ms
memory: 2388kb

input:

100000 55555
81 122 1 146 76 142 36 207 127 17 5 102 123 42 69 15 42 137 94 107 101 49 179 44 48 78 ...

output:

444

result:

ok single line: '444'

Test #9:

score: 10
Accepted
time: 189ms
memory: 12976kb

input:

1000000 233333
536 132 387 278 660 779 239 1629 535 1641 1374 532 53 840 432 180 1457 232 494 580 61...

output:

1819

result:

ok single line: '1819'

Test #10:

score: 10
Accepted
time: 196ms
memory: 12972kb

input:

1000000 666666
1053 405 264 292 1304 414 58 948 985 1112 865 1225 982 595 927 701 623 666 43 1019 43...

output:

1187

result:

ok single line: '1187'

Extra Test:

score: 0
Extra Test Passed