Pagini recente » Cod sursa (job #2309338) | Cod sursa (job #3003458) | Cod sursa (job #584272) | Cod sursa (job #263211) | Cod sursa (job #1563717)
#include <bits/stdc++.h>
using namespace std;
int n,k,a[100003],d[100003],poz[100003],sol[100003];
inline void Citire()
{
int i;
ifstream fin("scmax.in");
fin>>n;
for(i=1;i<=n;++i)
fin>>a[i];
fin.close();
}
inline void Solutie()
{
int i,x,p;
d[1]=a[1];
poz[1]=1;
k=1;
for(i=2;i<=n;++i)
{
x=a[i];
if(x>d[k])
{
d[++k]=x;
poz[i]=k;
}
else if(x<=d[1])
{
d[1]=x;
poz[i]=1;
}
else
{
p=lower_bound(d+1,d+k+1,x)-d;
d[p]=x;
poz[i]=p;
}
}
}
inline void Afisare()
{
int i,l;
l=k;
for(i=n;i>=1;--i)
if(poz[i]==l)
{
sol[l]=a[i];
l--;
}
ofstream fout("scmax.out");
fout<<k<<"\n";
for(i=1;i<=k;++i)
fout<<sol[i]<<" ";
fout.close();
}
int main()
{
Citire();
Solutie();
Afisare();
return 0;
}