记录编号 540293 评测结果 AAAAAAAAAA
题目名称 [Vijos1369] 难解的问题 最终得分 100
用户昵称 GravatarHale 是否通过 通过
代码语言 C++ 运行时间 0.064 s
提交时间 2019-08-19 21:37:48 内存使用 18.23 MiB
显示代码纯文本
#include<bits/stdc++.h>
#define I inline
using namespace std;
const int N=3e5+7;
int a[N],low[N],b[N],c[N];
int n,k,m,cnt,ans;
I int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9') {if (ch=='-')f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
int main()
{
	freopen("muzuka.in","r",stdin);
	freopen("muzuka.out","w",stdout);
	n=read(),k=read();
	for (int i=1;i<=n;i++) a[i]=read();
	for (int i=1;i<k;i++) if (a[i]<a[k]) b[++m]=a[i];
	for (int i=k+1;i<=n;i++) if (a[i]>a[k]) c[++cnt]=a[i];
	int tot=1;low[tot]=b[tot];
	if (!m) tot--;
	for (int i=2;i<=m;i++)
	{
		if (b[i]>low[tot]) low[++tot]=b[i];
		else 
		{
			int pos=lower_bound(low+1,low+tot+1,b[i])-low;
			low[pos]=b[i];
		}
	}
	ans=tot;
	memset(low,0,sizeof(low));tot=0;
	if (!cnt) tot--;
	low[++tot]=c[tot];
	for (int i=2;i<=cnt;i++)
	{
		if (c[i]>low[tot]) low[++tot]=c[i];
		else 
		{
			int pos=lower_bound(low+1,low+tot+1,c[i])-low;
			low[pos]=c[i];
		}
	}
	ans+=tot+1;
	printf("%d\n",ans);
	return 0;
}