记录编号 586723 评测结果 AAAAAAAAAA
题目名称 [Vijos1369] 难解的问题 最终得分 100
用户昵称 Gravatarqyd 是否通过 通过
代码语言 C++ 运行时间 0.054 s
提交时间 2024-02-23 17:23:43 内存使用 5.13 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int maxn=3e5+9;
int x[maxn],a[maxn],b[maxn];
int main()
{
	freopen("muzuka.in","r",stdin);
	freopen("muzuka.out","w",stdout);
	
	int N,K,s1=0,s2=0;
	scanf("%d%d",&N,&K);
	for(int i=1;i<=N;i++) scanf("%d",&x[i]);
	int mid=x[K];
	for(int i=1;i<=K-1;i++) if(x[i]<mid) a[++s1]=x[i];
	for(int i=K+1;i<=N;i++) if(x[i]>mid) b[++s2]=x[i];
	 
	memset(x,0,sizeof(x));
	x[1]=a[1];
	int l1=1;
	if(s1==0) l1=0;
	for(int i=2;i<=s1;i++)
	{
	 	if(a[i]>x[l1]) x[++l1]=a[i];
	 	else
	 	{
	 		int j=lower_bound(x+1,x+l1,a[i])-x;
	 		x[j]=a[i];	 		
		}
	}
	 
	memset(x,0,sizeof(x));
	x[1]=b[1];
	int l2=1;
	if(s2==0) l2=0;
	for(int i=2;i<=s2;i++)
	{
		if(b[i]>x[l2]) x[++l2]=b[i];
		else
	 	{
	 		int j=lower_bound(x+1,x+l2,b[i])-x;
	 		x[j]=b[i];
		}
	}
	 
	int ans=l1+l2+1;
	printf("%d",ans);
	 
	return 0;
}