Pagini recente » Cod sursa (job #2033729) | Arhiva de probleme | Cod sursa (job #3161374) | Cod sursa (job #2427466) | Cod sursa (job #3212818)
#include <fstream>
#include <vector>
#define ll long long
using namespace std;
const int NMAX = 100000;
int a[NMAX + 1];
int sol[NMAX + 1];
int urm[NMAX + 1];
ifstream cin("scmax.in");
ofstream cout("scmax.out");
void print_sol(int ind)
{
if (urm[ind] != 0)
print_sol(urm[ind]);
cout << a[ind] << " ";
}
signed main()
{
int n, i;
cin >> n;
for (i = 1; i <= n; i++)
cin >> a[i];
int dim = 0;
for (i = 1; i <= n; i++)
{
int st = 1, dr = dim, poz = 0;
while (st <= dr)
{
int med = ((st + dr) >> 1);
if (a[sol[med]] < a[i])
{
poz = med;
st = med + 1;
}
else
dr = med - 1;
}
if (poz + 1 > dim)
sol[++dim] = i;
else
sol[poz + 1] = i;
urm[i] = sol[poz];
}
cout << dim << "\n";
print_sol(sol[dim]);
}