记录编号 243616 评测结果 AAAAAAAAAA
题目名称 [NOIP 1999]拦截导弹 最终得分 100
用户昵称 Gravatar【离开·再见】星裔·自由蒂兰 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2016-03-30 10:41:35 内存使用 0.00 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=40010;
int Find(int,int,int);
int Refind(int,int,int);
int h[maxn],ge[maxn],len[maxn];
int rege[maxn],relen[maxn];
inline int haha()
{
	freopen("missile.in","r",stdin);
	freopen("missile.out","w",stdout);
	memset(h,0,sizeof(h));
	memset(ge,0,sizeof(ge));
	memset(rege,0,sizeof(rege));
	memset(len,0,sizeof(len));
	len[0]=0x7f7f7f7f;
	memset(relen,127,sizeof(relen));
	relen[0]=0;
	int p=1;
	while(scanf("%d",&h[p])!=EOF)p++;
	p--;
	for(int i=1;i<=p;i++)
	{
		int z=Find(h[i],0,i-1);
		ge[i]=z;
		len[z]=h[i];
	}
	for(int i=1;i<=p;i++)
	{
		int z=Refind(h[i],0,i-1);
		rege[i]=z;
		relen[z]=h[i];
	}
	int ans=0,an=0;
	for(int i=1;i<=p;i++)
	{
		if(ans<ge[i])ans=ge[i];
		if(an<rege[i])an=rege[i];
	}
	printf("%d\n%d\n",ans,an);
	return 0;
}
int hehe=haha();
int main(){;}
int Find(int x,int l,int r)
{
	if(r<l)return l;
	int mid=(l+r)>>1;
	if(len[mid]>=x)Find(x,mid+1,r);
	else Find(x,l,mid-1);
}
int Refind(int x,int l,int r)
{
	if(r<l)return l;
	int mid=(l+r)>>1;
	if(relen[mid]>=x)Refind(x,l,mid-1);
	else Refind(x,mid+1,r);
}