比赛 假期找点事儿做题吧 评测结果 AAAAAAAAAA
题目名称 渡轮问题 最终得分 100
用户昵称 CSU_Turkey 运行时间 0.006 s
代码语言 C++ 内存使用 0.47 MiB
提交时间 2017-06-10 17:27:43
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int inf=10005;
int n,a[inf],b[inf],g[inf],c[inf];
int main()
{
	freopen("maxxl.in","r",stdin);
	freopen("maxxl.out","w",stdout);
//	freopen("1.txt","r",stdin);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	scanf("%d",&a[i]);
	memset(b,0x7f,sizeof(b));
	int h=0;
	for(int i=n;i>=1;i--)
	{
		if(b[h]>=a[i])
		b[++h]=a[i],
		g[i]=h;
		else
		{
			int l=1,r=h;
			while(l<r)
			{
				int mid=(l+r)>>1;
				if(b[mid]>=a[i])l=mid+1;
				else r=mid;
			}
			b[l]=a[i];
			g[i]=l;
			
		}
	}
	cout<<h<<endl;
	int last=-1,jj=0;
	for(int i=1;h;i++)
	if(g[i]==h&&a[i]>=last)
	c[++jj]=a[i],
	h--;
	for(int i=1;i<=jj;i++)
	cout<<c[i]<<" ";
	return 0;
}