Pagini recente » Cod sursa (job #333518) | Cod sursa (job #1866422) | Cod sursa (job #2571217) | Cod sursa (job #1351039) | Cod sursa (job #1437676)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,a[100010],minim[100010],poz[100010],sol,v[100010],nv;
inline void Read()
{
f>>n;
int i;
for(i=1;i<=n;i++)
f>>a[i];
f.close();
}
inline void Solve()
{
int i, p;
for (i=1; i<=n; i++)
{
p=upper_bound(minim+1,minim+sol+1,a[i])-minim;
if(minim[p-1]==a[i])
p--;
minim[p]=a[i];
poz[i]=p;
if (p>sol)
sol=p;
}
}
inline void Write()
{
g<<sol<<"\n";
int i,lg=sol;
for (i=n;i;i--)
{
if(poz[i]==lg)
{
v[++nv]=a[i];
lg--;
}
}
for (i=nv;i;i--)
g<<v[i]<<" ";
g<<"\n";
g.close();
}
int main()
{
Read();
Solve();
Write();
return 0;
}