Pagini recente » Cod sursa (job #654785) | Cod sursa (job #721076) | Cod sursa (job #1388415) | Cod sursa (job #1507053) | Cod sursa (job #1149718)
#include <cstdio>
using namespace std;
FILE * f=freopen("scmax.in","r",stdin);
FILE * g=freopen("scmax.out","w",stdout);
int a[100001],poz[100001],cmax,i,n,ca,cb;
int x[100001];
int best(int st,int dr)
{
if (st>dr)
return 1;
if (st==dr && x[poz[st]]>x[i])
return st+1;
if (st==dr && x[poz[st]]==x[i])
return 0;
int pivot=(st+dr)/2;
if (x[poz[pivot]]<=x[i])
return best(st,pivot);
return best(pivot+1,dr);
}
int main()
{
scanf("%d",&n);
//f>>n;
for (i=1;i<=n;i++)
scanf("%d",&x[i]);
//f>>x[i];
for(i=n;i>0;i--)
{
ca=x[i];
int aux;
if (x[i]>x[poz[1]])
aux=1;
else aux=best(1,cmax);
poz[aux]=i;
a[i]=poz[aux-1];
cmax=aux>cmax?aux:cmax;
}
cb=poz[cmax];
printf("%d\n",cmax);
//g<<cmax<<'\n';
while (cb)
{
printf("%d ",x[cb]);
//g<<x[cb]<<' ';
cb=a[cb];
}
printf("\n");
//g<<'\n';
fclose(f);
fclose(g);
return 0;
}