Pagini recente » Cod sursa (job #2768022) | Cod sursa (job #1255054) | tema | Cod sursa (job #3004812)
#include <bits/stdc++.h>
using namespace std;
const int NMAX =1e5+1;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
long long v[NMAX],L[NMAX];
int P[NMAX],D[NMAX],n,k,nr;
int cb(int st, int dr, int x,int poz){
if(st>dr) return poz;
else {
int m=(st+dr)/2;
if(D[m]>x) return cb(st,m-1,x,m);
else return cb(m+1,dr,x,poz);
}
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++) fin>>v[i];
D[++k]=v[1];
P[1]=1;
for(int i=2;i<=n;i++)
if(v[i]>D[k]) D[++k]=v[i],P[i]=k;
else{
int poz=cb(1,k,v[i],k+1);
D[poz]=v[i];
P[i]=poz;
}
fout<<k<<'\n';
int j=n;
for(int i=k;i>=1;i--){
while(P[j]>i) j--;
L[++nr]=v[j];
}
for(int i=nr;i>=1;i--) fout<<L[i]<<" ";
return 0;
}