Pagini recente » Cod sursa (job #205299) | Cod sursa (job #651740) | Cod sursa (job #957503) | Rating Raizen Isildur (glaedrpk) | Cod sursa (job #3004806)
#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 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=k+1,st=1,dr=k;
while(st<=dr){
int m=(st+dr)/2;
if(D[m]>=v[i]) poz=m,dr=m-1;
else st=m+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;
}