Pagini recente » Cod sursa (job #1740894) | Cod sursa (job #1629698) | Cod sursa (job #415862) | Cod sursa (job #1652419) | Cod sursa (job #2553666)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int N=100005;
int poz[N], a[N], i, j, n, m,mx, best[N], k, sol[N], p;
int cautbin(int l, int r, int x)
{
while(l<r)
{
int m=(l+r)/2;
if(a[m]>x)
r=m;
else l=m+1;
}
return l;
}
int main()
{
fin>>n;
for(i=1;i<=n;++i)
fin>>a[i];
best[1]=a[1], poz[1]=1;
k=1;
for(i=2;i<=n;++i)
{
if(a[i]>best[k])
{
best[++k]=a[i];
poz[i]=k;
}
else
{
int pz=cautbin(1,k,a[i]);
best[pz]=a[i];
poz[i]=pz;
}
}
for(i=n;i>=1;--i)
if(poz[i]==k)
sol[++p]=a[i],--k;
fout<<p<<'\n';
for(i=p;i>=1;--i)
fout<<sol[i]<<' ';
return 0;
}