记录编号 247860 评测结果 AAAAAAAAAA
题目名称 [NOIP 1999]拦截导弹 最终得分 100
用户昵称 Gravatar水墨青花 是否通过 通过
代码语言 C++ 运行时间 0.018 s
提交时间 2016-04-09 20:17:30 内存使用 0.30 MiB
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<string>
 
using namespace std;

int BS(int,int,int);
void Work();

int a[1010];
int h[1010];
int f[1010];
int b[1010];

int ans1=0,ans2=0;


int main()
{
	freopen("missile.in","r",stdin);
	freopen("missile.out","w",stdout);
	
	memset(a,0,sizeof(a));
	memset(f,0,sizeof(f));
	memset(h,0,sizeof(h));
	memset(b,0,sizeof(b));
	
	Work();
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}

void Work()
{
	int i=1;
	while(scanf("%d",&a[i])!=EOF)
	{
		int id=0;
		id=BS(1,ans1,a[i]);
		f[i]=id;
		
		if(f[i]>ans1)
		{
			ans1=f[i];
		}
		
		int x=0;
		for(int j=1;j<=ans2;j++)
		{
			if(h[j]>a[i])
			{
				x=j;
				break;
			}
		}
		if(x==0)
		{
			ans2++;
			x=ans2;
		}
		h[x]=a[i];
		
		i++;
	}
	printf("%d\n%d",ans1,ans2);
}

int BS(int l,int r,int num)
{
	while(l<=r)
	{
		int mid=0;
		mid=(l+r)>>1;
		
		if(num<=b[mid])
		{
			l=mid+1;
		}
		else
		{
			r=mid-1;
		}
	}
	b[l]=num;
	return l;
}