Pagini recente » Cod sursa (job #372655) | Cod sursa (job #2384799) | Cod sursa (job #2287625) | Cod sursa (job #2424832) | Cod sursa (job #1697686)
#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;
for(i=lmax; i>=0; i--){
while(p[dr]!=i) dr--;
q[i]=v[dr];
}
for(i=0; i<=lmax; i++)
fprintf(fout, "%d ", q[i]);
fclose(fin);
fclose(fout);
return 0;
}