Pagini recente » Cod sursa (job #2383761) | Cod sursa (job #1550478) | Monitorul de evaluare | Cod sursa (job #1550474) | Cod sursa (job #1915062)
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int v[100001];
int aux[100001];
int poz[100001];
int sol[100001];
int main()
{
FILE *fin, *fout;
int n,i,k,st,dr,mij;
fin=fopen("scmax.in","r");
fout=fopen("scmax.out","w");
fscanf(fin,"%d",&n);
k=0;
for(i=1;i<=n;i++){
fscanf(fin,"%d",&v[i]);
st=0;
dr=k;
while(st<dr){
mij=(st+dr)/2;
if(aux[mij]==v[i])
st=dr=mij;
else if(aux[mij]<v[i])
st=mij+1;
else
dr=mij;
}
mij=(st+dr)/2;
if(st==k && v[i]>=aux[k])
k++;
aux[mij]=v[i];
poz[i]=mij;
printf("%3d | %3d\n",v[i],poz[i]);
}
fprintf(fout,"%d\n",k);
dr=k-1;
for(i=n;i>0;i--){
if(poz[i]==dr){
sol[dr]=i;
dr--;
}
}
for(i=0;i<k;i++){
fprintf(fout,"%d ",v[sol[i]]);
}
fclose(fin);
fclose(fout);
return 0;
}