Pagini recente » Cod sursa (job #241518) | Cod sursa (job #2311433) | Cod sursa (job #1726445) | Cod sursa (job #1007302) | Cod sursa (job #1149731)
#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 st;
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=0;
else
aux=best(1,cmax);
if(x[poz[aux]]==x[i])
aux=0;
else aux++;
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;
}