Pagini recente » Cod sursa (job #1050261) | Cod sursa (job #1287068) | Cod sursa (job #1522584) | Cod sursa (job #1593263) | Cod sursa (job #996795)
Cod sursa(job #996795)
#include <fstream>
#include <algorithm>
using namespace std;
int n,v[100005],len,l[100005],poz[100005],a[100005];
inline void Read()
{
int i;
ifstream fin("scmax.in");
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i];
fin.close();
}
inline int Bsearch(int x)
{
int *p;
if(x==l[len])
return len;
if(x>l[len])
return len+1;
p=upper_bound(l+1,l+len+1,x);
return p-l;
}
inline void Solve()
{
int i,p;
l[1]=v[1];len=1;poz[1]=1;
for(i=2;i<=n;i++)
{
p=Bsearch(v[i]);
l[p]=v[i];
poz[i]=p;
if(len<p)
len=p;
}
}
inline void Afisare()
{
ofstream fout("scmax.out");
int i,lg;
lg=len;
for(i=n;i>0;i--)
if(poz[i]==lg)
{
a[lg]=v[i];
lg--;
}
fout<<len<<"\n";
for(i=1;i<=len;i++)
fout<<a[i]<<" ";
fout<<"\n";
fout.close();
}
int main()
{
Read();
Solve();
Afisare();
return 0;
}