Pagini recente » Cod sursa (job #2580086) | Cod sursa (job #2251212) | Cod sursa (job #792194) | Cod sursa (job #2368060) | Cod sursa (job #1147171)
#include <fstream>
using namespace std;
int n,v[100001],p[100001],b[100001],bl;
int bs(int val)
{
int ans=0,s=1,e=bl-1;
while(s<=e)
{
int m=(s+e)/2;
if(v[b[m]]<val)
{
ans=m;
s=m+1;
}
else
e=m-1;
}
return ans;
}
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void sol(int i)
{
if(p[i])
sol(p[i]);
fout<<v[i]<<" ";
}
int main()
{
int i,j;
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i];
for(i=1;i<=n;++i)
if(v[i]>v[b[bl]])
{
p[i]=b[bl];
b[++bl]=i;
}
else
{
j=bs(v[i]);
p[i]=b[j];
b[j+1]=i;
}
fout<<bl<<"\n";
sol(b[bl]);
return 0;
}