Pagini recente » Cod sursa (job #2496821) | Cod sursa (job #2696372) | Cod sursa (job #2530097) | Cod sursa (job #1816339) | Cod sursa (job #1323228)
#include <fstream>
#define nmax 100005
#define inf 0x3f3f3f3f
#define algorithm
using namespace std;
int n,a[nmax],v[nmax],t[nmax],l[nmax],st[nmax],vf,nrv;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void citire()
{
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>a[i];
//v[i]=inf;
}
}
int caut_bin(int x)
{
int li=1,lf=nrv,m;
while(li<=lf)
{
m=(li+lf)/2;
if(a[v[m]]==x)
return m;
if(a[v[m]]>x)
{
lf=m-1;
continue;
}
li=m+1;
}
return li;
}
void rezolv()
{
int poz;
t[1]=0;
l[1]=0;
v[1]=1;
nrv=1;
for(int i=2;i<=n;i++)
{
poz=caut_bin(a[i]);
v[poz]=i;
nrv=max(nrv,poz);
l[i]=poz;
t[i]=v[poz-1];
}
}
void afisare()
{
int mx=-1,poz;
for(int i=1;i<=n;i++)
if(l[i]>mx)
{
mx=l[i];
poz=i;
}
st[++vf]=a[poz];
while(t[poz])
{
poz=t[poz];
st[++vf]=a[poz];
}
for(int i=vf;i>=1;i--)
fout<<st[i]<<" ";
}
int main()
{
citire();
rezolv();
afisare();
return 0;
}