Pagini recente » Cod sursa (job #240927) | Cod sursa (job #433435) | Cod sursa (job #2701010) | Cod sursa (job #2359329) | Cod sursa (job #919168)
Cod sursa(job #919168)
#include<fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int i,n,nr,v[100001],u[100001],pred[100001],p,ok=1,k=0,af[100001];
int caut(int x){
int i=0,pas=1<<16;
while(pas!=0){
if(i+pas<=nr && v[u[i+pas]]<x) i+=pas;
pas/=2;
}
return i+1;
}
int main(){
in>>n;
for(i=1;i<=n;i++) in>>v[i];
u[++nr]=1;
for(i=2;i<=n;i++){
p=caut(v[i]);
if(p>nr) nr++;
pred[i]=u[p-1];
u[p]=i;
}
out<<nr<<'\n';
p=u[nr];
while(ok){
if(pred[p]==0) ok=0;
af[++k]=v[p];
p=pred[p];
}
for(i=k;i>=1;i--) out<<af[i]<<' ';
return 0;
}