Pagini recente » Cod sursa (job #2347322) | Cod sursa (job #2358396) | Cod sursa (job #910690) | Cod sursa (job #445861) | Cod sursa (job #1118622)
#include<fstream>
#define dim 100002
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int a[dim],l[dim],in[dim],p[dim];
int n;
int nr;
void afisare(int x);
void citire()
{
int i;
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
}
int cauta(int x)
{
int st,dr,m;
st=0;
dr=nr;
while(st<=dr)
{
m=(st+dr)/2;
if(a[in[m]]<x&&a[in[m+1]]>=x)
return m;
else
if(a[in[m+1]]>x)
dr=m-1;
else
st=m+1;
}
return nr;
}
void rezolva()
{
int i,poz,maxim;
nr=1;
l[1]=in[1]=1;
l[0]=0;
for( i = 2; i <= n; i++)
{
poz=cauta(a[i]);
in[poz+1]=i;
p[i]=in[poz];
l[i]=poz+1;
if(poz+1>nr)
nr=nr+1;
}
maxim=l[1];
poz=1;
for( i = 2; i <= n; i++ )
if(maxim<l[i])
{
maxim=l[i];
poz=i;
}
g<<maxim<<"\n";
afisare(poz);
}
void afisare(int x)
{
if(p[x]!=0)
{
afisare(p[x]);
}
g<<a[x]<<" ";
}
int main()
{
citire();
rezolva();
return 0;
}