Pagini recente » Cod sursa (job #363871) | Cod sursa (job #1028162) | Cod sursa (job #2124383) | Cod sursa (job #2064885) | Cod sursa (job #1792620)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
vector <int> v[100001];
void adaug(int x)
{
int i;
for(i=v[0][0];i>1;i--)
{
if(x<v[i][i-1] && x>v[i][i-2])
{
v[i][i-1]=x;
return ;
}
else
{
if(x>v[i][i-1])
{
if(i!=v[0][0])
{
if(x<v[i+1][i])
{
v[i+1].clear();
for(int j=0;j<i;j++)
v[i+1].push_back(v[i][j]);
v[i+1].push_back(x);
return ;
}
}
else
{
for(int j=0;j<i;j++)
v[i+1].push_back(v[i][j]);
v[0][0]++;
v[i+1].push_back(x);
return ;
}
}
}
}
if(v[1][0]>x)
{
v[1][0]=x;
}
else
{
if(v[0][0]>1)
{
if(x<v[2][1] && x>v[1][0])
v[2][0]=v[1][0];v[2][1]=x;
}
else
{
if(x>v[1][0])
{
v[0][0]++;
v[2].push_back(v[1][0]);
v[2].push_back(x);
}
}
}
}
int main()
{
int n,x,i;
fin>>n;
fin>>x;
v[1].push_back(x);
v[0].push_back(1);
for(i=2;i<=n;i++)
{
fin>>x;
adaug(x);
}
fout<<v[0][0]<<'\n';
for(i=0;i<v[0][0];i++)
fout<<v[v[0][0]][i]<<' ';
return 0;
}