Pagini recente » Cod sursa (job #997230) | Rating Nadolu Bogdan (bobo13) | Cod sursa (job #2418727) | Istoria paginii runda/pb_luna/clasament | Cod sursa (job #1697691)
#include <stdio.h>
#include <stdlib.h>
int v[100001], q[100001], p[100001], lmax=-1;
int main(){
int n, i, st, dr, mij;
FILE *fin, *fout;
fin=fopen("scmax.in", "r");
fout=fopen("scmax.out", "w");
fscanf(fin, "%d", &n);
for(i=0; i<n; i++){
fscanf(fin, "%d", &v[i]);
st=0; dr=lmax;
while(st<=dr){
mij=(st+dr)/2;
if(v[i]<q[mij]) dr=mij-1;
else st=mij+1;
}
if(q[st-1]!=v[i]){
lmax+=(st>lmax);
q[st]=v[i];
p[i]=st;
}
}
fprintf(fout, "%d\n", lmax+1);
dr=n-1;
for(i=lmax; i>=0; i--){
while(p[dr]!=i && dr>=0) dr--;
q[i]=v[dr];
}
for(i=0; i<=lmax; i++)
fprintf(fout, "%d ", q[i]);
fclose(fin);
fclose(fout);
return 0;
}