Pagini recente » Borderou de evaluare (job #1444420) | Borderou de evaluare (job #1640772) | Borderou de evaluare (job #2680734) | Cod sursa (job #3127394) | Cod sursa (job #2614407)
#include <stdio.h>
#include <stdlib.h>
FILE *fin , *fout;
int v[100000],poz[100000],rez[100000],d[100000];
int cb(int st,int dr,int x) {
int mij,p=0;
while(st<=dr) {
mij=(st+dr)/2;
if(v[poz[mij]]<x) {
p=mij;
st=mij+1;
}
else {
dr=mij-1;
}
}
return p;
}
int main() {
fin=fopen("scmax.in","r");
fout=fopen("scmax.out","w");
int i,n,nr=0,p,k,l=0;
fscanf(fin,"%d",&n);
for(i=0;i<n;i++) {
fscanf(fin,"%d",&v[i]);
}
for(i=0;i<n;i++) {
p=cb(1,l,v[i]);
if(p+1>l) {
l=p+1;
}
d[i]=p+1;
poz[d[i]]=i;
if(d[i]>nr) {
nr=d[i];
}
}
fprintf(fout,"%d\n",nr);
k=0;
for(i=n-1;i>=0;i--) {
if(nr==d[i]) {
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;
}