Pagini recente » Cod sursa (job #48182) | Cod sursa (job #839111) | Cod sursa (job #2173799) | Cod sursa (job #1296981) | Cod sursa (job #622304)
Cod sursa(job #622304)
#include<cstdio>
using namespace std;
int n,i,best,sol,P[30010],L[30010],V[30010],search(int);
void read(),solve(),afis(int);
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
}
void solve()
{
scanf("%d",&V[1]);
L[1]=1;
for(i=2;i<=n;i++)
{
scanf("%d",&V[i]);
best=search(V[i]);
P[i]=L[best];
L[best+1]=i;
if(sol<best+1)sol=best+1;
}
printf("%d\n",sol);
afis(L[sol]);
}
int search(int x)
{
int pr=0,ult=sol;
while(pr<=ult)
{
int mij=(pr+ult)/2;
if(x>V[L[mij]] && x<=V[L[mij+1]])return mij;
if(x<=V[L[mij]]){ult=mij-1;continue;}
if(x>V[L[mij+1]]){pr=mij+1;continue;}
}
return sol;
}
void afis(int poz)
{
if(P[poz])afis(P[poz]);
printf("%d ",V[poz]);
}