Pagini recente » Cod sursa (job #837444) | Cod sursa (job #692469) | Cod sursa (job #1544203) | Cod sursa (job #2291869) | Cod sursa (job #641792)
Cod sursa(job #641792)
#include<cstdio>
#include<iostream>
#include<fstream>
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);
cin>>n;//scanf("%d",&n);
}
void solve()
{
cin>>V[1];//scanf("%d",&V[1]);
L[1]=1;
sol=1;
for(i=2;i<=n;i++)
{
cin>>V[i];//scanf("%d",&V[i]);
best=search(V[i]);
P[i]=L[best];
L[best+1]=i;
if(sol<best+1)sol=best+1;
}
cout<<sol<<'\n';//printf("%d\n",sol);
afis(L[sol]);
}
int search(int x)
{
int pr=0,ult=sol,mij;
while(pr<=ult)
{
mij=(pr+ult)/2;
if(x>V[L[mij]] && x<=V[L[mij+1]])return mij;
if(x>V[L[mij+1]]){pr=mij+1;}
else {ult=mij-1;}
}
return sol;
}
void afis(int poz)
{
if(P[poz])afis(P[poz]);
cout<<V[poz]<<' ';//printf("%d ",V[poz]);
}