Pagini recente » Profil Sorinmocanu | Cod sursa (job #2001172) | Monitorul de evaluare | Istoria paginii utilizator/nicudirva | Cod sursa (job #2304940)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int N,v[100010],D[100010],T[100010],stt,dim,i;
void afisare(int pozz){
if(T[pozz])
afisare(T[pozz]);
fout<<v[pozz]<<" ";
}
int cautare (int x){
int st=1;
int dr=dim;
while(st<=dr){
int mid=(st+dr)/2;
if(v[D[mid]]<x)
st=mid+1;
else
dr=mid-1;
}
return st;
}
int main(){
fin>>N;
for(i=1;i<=N;i++){
fin>>v[i];
}
///varianta n*log_n
D[1]=1;
dim=1;
for(i=2;i<=N;i++){
stt=cautare(v[i]);
if(stt>dim)
D[++dim]=i;
else
D[stt]=i;
T[i]=D[stt-1];
}
//for(i=1;i<=N;i++)
// fout<<L[i]<<" ";
fout<<dim<<"\n";
afisare(D[dim]);
return 0;
}