Pagini recente » Cod sursa (job #3234908) | Cod sursa (job #599937) | Cod sursa (job #2750623) | Cod sursa (job #1740685) | Cod sursa (job #2614382)
#include <stdio.h>
#include <stdlib.h>
FILE *fin , *fout;
int v[100000],poz[100000],rez[100000];
int cb(int st,int dr,int x) {
int mij,p=-1;
while(st<=dr) {
mij=(st+dr)/2;
if(rez[mij]<x) {
st=mij+1;
}
else {
p=mij;
dr=mij-1;
}
}
return p;
}
int main() {
fin=fopen("scmax.in","r");
fout=fopen("scmax.out","w");
int i,n,nr,p,k;
fscanf(fin,"%d",&n);
for(i=0;i<n;i++) {
fscanf(fin,"%d",&v[i]);
}
nr=0;
rez[0]=v[0];
poz[0]=0;
for(i=1;i<n;i++) {
p=-1;
p=cb(0,nr,v[i]);
if(p==-1) {
rez[nr]=v[i];
nr++;
poz[i]=nr;
}
else {
poz[i]=p;
rez[p]=v[i];
}
}
fprintf(fout,"%d\n",nr+1);
k=0;
for(i=n-1;i>=0;i--) {
if(poz[i]==nr) {
rez[k]=v[i];
k++;
nr--;
}
}
for(i=k-1;i>=0;i--) {
fprintf(fout,"%d ",rez[i]);
}
fprintf(fout,"\n");
fclose(fin);
fclose(fout);
return 0;
}