Pagini recente » Cod sursa (job #645241) | Cod sursa (job #2971955) | Cod sursa (job #2627585) | Cod sursa (job #1969433) | Cod sursa (job #3278233)
#include <iostream>
#include<fstream>
using namespace std;ifstream fin("scmax.in");ofstream fout("scmax.out");const int NMAX=100001;
int v[NMAX],lng[NMAX],parent[NMAX],lgmax,n,i,best[NMAX],idx,lg;
int caut(int k){int st=0,dr=lgmax,rsp=-1,m;
while(st<=dr){m=(st+dr)/2;
if(v[best[m]]<k){rsp=m;st=m+1;}
else dr=m-1;
}return rsp;
}
void afis(int k){
if(parent[k])afis(parent[k]);
fout<<v[k]<<' ';
}
int main()
{fin>>n;for(i=1;i<=n;i++){fin>>v[i];
lg=caut(v[i])+1;cout<<lg<<' ';
if(lg>lgmax){
idx=i;lgmax=lg;
}
best[lg]=i;
parent[i]=best[lg-1];
}fout<<lgmax<<'\n';afis(best[lgmax]);
return 0;
}