记录编号 185698 评测结果 AAAAAAAAAA
题目名称 渡轮问题 最终得分 100
用户昵称 Gravatarmikumikumi 是否通过 通过
代码语言 C++ 运行时间 0.041 s
提交时间 2015-09-08 14:56:40 内存使用 6.06 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cmath>
#include<set>
#include<algorithm>
#include<deque>
using namespace std;
int N,X[10010]={0},M[10010]={0},ans=0,len=0;
deque<int> Q[10010],P;
int find(int x)
{
	int l=1,r=len,mid;
	while(l<=r)
	{
		mid=(l+r)/2;
		if(x>=M[mid]) l=mid+1;
		else r=mid-1;
		//cout<<l<<endl;
	}
	return l;
}
void out()
{
	int tem=Q[len][0];
	//P.push_front(X[tem]);
	for(int i=len;i>=1;i--)
	{
		for(int k=0;k<Q[i].size();k++)
		{
			if(X[Q[i][k]]<=X[tem])
			{
				tem=Q[i][k];
				P.push_front(X[tem]);
				break;
			}
		}
	}
	for(int i=0;i<P.size();i++)
		printf("%d ",P[i]);
}
int main()
{
	freopen("maxxl.in","r",stdin);
	freopen("maxxl.out","w",stdout);
	scanf("%d",&N);
	for(int i=1;i<=N;i++)
	{
		scanf("%d",&X[i]);
		int k=find(X[i]);
		len=max(len,k);
		M[k]=X[i];
		Q[k].push_back(i);
	}
	printf("%d\n",len);
	out();
	return 0;
}