Pagini recente » Cod sursa (job #3281216) | Cod sursa (job #1862986) | Cod sursa (job #3272615) | Cod sursa (job #2618557) | Cod sursa (job #1510501)
#include <iostream>
#include <stdio.h>
using namespace std;
int indice_capat_subsir[100010],predecesor[100010],n,l,x[100010],pozmax;
void citire()
{
freopen("scmax.in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&x[i]);
}
int cautare_binara(int q, int i)
{
int st=1;
int fi=l;
while(st<=fi)
{
int mij=(st+fi)/2;
if(x[indice_capat_subsir[mij]]<x[i])
st=mij+1;
else if(x[indice_capat_subsir[mij]]>=x[i])
fi=mij-1;
}
return st;
}
void afisare(int k)
{
if(k>0)
{
afisare(predecesor[k]);
printf("%d ",x[k]);
return;
}
return;
}
int main()
{
freopen("scmax.out","w",stdout)
citire();
for(int i=1;i<=n;i++)
{
int k=cautare_binara(x[i],i);
predecesor[i]=indice_capat_subsir[k-1];
indice_capat_subsir[k]=i;
if(k>l)
{
l=k;
pozmax=i;
}
}
printf("%d\n",l);
afisare(pozmax);
return 0;
}