Pagini recente » Cod sursa (job #432891) | Cod sursa (job #356531) | Cod sursa (job #1029632) | Cod sursa (job #358613) | Cod sursa (job #721799)
Cod sursa(job #721799)
#include <stdio.h>
#include <vector>
using namespace std;
vector<int>v;
int bst[100005],a[100005],c[100005],n,k;
int insert(int x){
int st=1,dr=k+1,md;
while(st!=dr){
md=(st+dr)/2;
if(c[md]<x)st=md+1; else dr=md; }
c[st]=x;
if(st==k+1)st=++k;
return st;
}
int main(){
int x;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
bst[i]=insert(a[i]);}
printf("%d\n",k);
for(int i=n;i>0;i--)
if(bst[i]==k){v.push_back(a[i]); k--;}
for(;v.size()>0;){
printf("%d ",v.back());
v.pop_back();}
}