Pagini recente » Cod sursa (job #1919609) | Cod sursa (job #2610668) | Cod sursa (job #1442260) | Cod sursa (job #1442270) | Cod sursa (job #1913822)
#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=mij+1;
else
dr=mij-1;
}
mij=(st+dr)/2;
if(st==k && v[i]>=aux[k])
k++;
aux[st]=v[i];
poz[i]=st;
}
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;
}