Pagini recente » Cod sursa (job #2135361) | Cod sursa (job #2137865) | Cod sursa (job #1928072) | Cod sursa (job #2689652) | Cod sursa (job #1604129)
#include <iostream>
#include <fstream>
#define dim 100001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[dim],sc[dim],urm[dim];
int n,len;
void teachmemasterpls()
{
for (int k=1; k<=n; ++k) fout<<urm[k]<<" ";
fout<<'\n';
for (int k=1; k<=n; ++k) fout<<sc[k]<<" ";
fout<<"\n\n";
}
void readV()
{
fin>>n;
for (int i=1; i<=n; ++i)
fin>>v[i];
}
void print(int x)
{
if (urm[x]) print(urm[x]);
fout<<v[x]<<" ";
}
inline int binarySearch(int x)
{
int i,j;
for (i=1; i<=len; ++i)
if (v[sc[i]]>x) break;
return i-1;
}
void pd()
{
sc[1]=1;
len=1;
for (int i=2; i<=n; ++i)
{
int x=v[i];
int poz=binarySearch(x); //fout<<poz<<'\n';
if (poz==len) sc[++len]=i;
else if (v[sc[poz+1]]>x) sc[poz+1]=i;
urm[i]=sc[poz];
//teachmemasterpls();
}
fout<<len<<'\n';
print(sc[len]);
}
int main()
{
readV();
pd();
return 0;
}