Pagini recente » Cod sursa (job #2079410) | Cod sursa (job #2157898) | Cod sursa (job #693044) | Cod sursa (job #3134956) | Cod sursa (job #1469974)
#include <iostream>
#include <algorithm>
#include <fstream>
#define MAX 100015
using namespace std;
int n, a[MAX];
int p[MAX], d[MAX];
fstream f, g;
void write (int maxim, int ind)
{
if (maxim == 0)
return ;
int ind2;
for (ind2 = ind; ind2 >=1 ;ind2--)
{
if (p[ind2] == maxim -1 && a[ind2] < a[ind])
{
write(maxim-1, ind2);
break;
}
}
g<< a[ind] <<" ";
}
int main(void)
{
int crt = 0, indice;
f.open("scmax.in", ios::in);
g.open("scmax.out", ios::out);
f >> n;
int i;
for (i = 1; i <= n; i++)
f >> a[i];
d[++crt] = a[1];
p[crt] = 1;
for (i = 2; i <= n; ++i)
{
if (d[1] > a[i]) {
d[1] = a[i];
p[i] = 1;
}
else if (d[crt] < a[i])
{
d[++crt] = a[i];
p[i] = crt;
}
else
{
int *ind;
ind = lower_bound (d + 1 , d + crt + 1, a[i]);
//cout << ind << '\n';
d[ind - d ] = a[i];
p[i] = ind - d ;
}
}
int maxim = -1;
for (i = 1 ; i <= n ; i++)
{
if(maxim < p[i])
{
maxim = p[i];
indice = i;
}
}
g << maxim << '\n';
write(maxim, indice);
}