记录编号 | 185698 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | 渡轮问题 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | 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; }