Pagini recente » Cod sursa (job #2986795) | Cod sursa (job #2592971) | Cod sursa (job #142617) | Cod sursa (job #2394997) | Cod sursa (job #2736883)
#include <bits/stdc++.h>
#define inf 2000000001
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,i,t,p,poz,u,mij,pz[100100],v[100100],a[100100];
void recons(int lungime, int pozitie, int ant)
{
int k;
if(lungime==0)return;
for(k=pozitie;k>=1;k--)
{
if(v[k]<ant && pz[k]==lungime)
{
recons(lungime-1,k,v[pozitie]);
g<<v[k]<<" ";
return;
}
}
}
int main()
{
f>>n;
for(i=1;i<=n;i++)f>>v[i];
t=1;a[1]=v[1];pz[1]=1;
for(i=2;i<=n;i++)
{
if(v[i]>a[t])t++,a[t]=v[i],pz[i]=t;
else
{
p=1;u=t;poz=0;
while(p<=u)
{
mij=(p+u)/2;
if(v[i]>a[mij])poz=mij,p=mij+1;
else u=mij-1;
}
a[poz+1]=v[i];
pz[i]=poz+1;
}
}
g<<t<<'\n';
recons(t,n,inf);
return 0;
}