Pagini recente » Cod sursa (job #67963) | Cod sursa (job #1891399) | Cod sursa (job #2983078) | Cod sursa (job #2118688) | Cod sursa (job #1781703)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fi("scmax.in");
ofstream fo("scmax.out");
int v[100001], u[100001], ord[100001], PUTERE;
int out[100001];
inline int CB(int x){
int pas=PUTERE, rez=0;
for(pas/=2;pas>0;pas/=2)
if(v[rez+pas]!=0 && x>u[v[rez+pas]])
rez+=pas;
return rez;
}
int main()
{
int n, i, poz, maxim=0;
fi>>n;
PUTERE=1;
while(PUTERE<n)
PUTERE*=2;
for(i=1;i<=n;i++)
fi>>u[i];
for(i=1;i<=n;i++){
poz=CB(u[i]);
v[poz+1]=i;
ord[i]=v[poz];
if(poz+1>maxim)
maxim=poz+1;
}
fo<<maxim<<'\n';
i=v[maxim];
poz=0;
do{
out[poz++]=u[i];
i=ord[i];
}while(i!=0);
for(poz--;poz>=0;poz--)
fo<<out[poz]<<' ';
fi.close();
fo.close();
return 0;
}