Pagini recente » Cod sursa (job #1912717) | Cod sursa (job #2437607) | Cod sursa (job #901115) | Cod sursa (job #1075347) | Cod sursa (job #1697180)
#include <stdio.h>
#include <stdlib.h>
int v[100001], q[100001], p[100001], lmax;
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=1; i<=n; i++){
fscanf(fin, "%d", &v[i]);
st=1; 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);
dr=n;
for(i=lmax; i; i--){
while(p[dr]!=i) dr--;
q[i]=v[dr];
}
for(i=1; i<=lmax; i++)
fprintf(fout, "%d ", q[i]);
fclose(fin);
fclose(fout);
return 0;
}