Pagini recente » Cod sursa (job #1527672) | Cod sursa (job #2271177) | Cod sursa (job #2086378) | Cod sursa (job #219274) | Cod sursa (job #2412380)
//nlogn
#include <bits/stdc++.h>
#define maxN 10005
using namespace std;
int n, i, j, v[maxN], sol[maxN], lu[maxN], pozitii[maxN];
int st, dr, mij, poz, k;
int main()
{
ifstream f("scmax.in");
ofstream g("scmax.out");
f >> n;
for(i = 1; i <= n; i ++)
f >> v[i];
for(i = 1; i <= n; i ++)
{
if(v[i] > sol[k])
{
sol[++ k] = v[i];
pozitii[k] = i;
lu[i] = k;
}
else
{
st = 1, dr = k, poz = k;
while(st <= dr)
{
mij = (st + dr) / 2;
if(sol[mij] < v[i]) st = mij + 1;
else
{
dr = mij - 1;
poz = mij;
}
}
sol[poz] = v[i];
pozitii[poz] = i;
lu[i] = poz;
}
}
g << k << "\n";
for(i = n, j = 0; i > 0 && k; i --)
if(lu[i] == k)
{
sol[++ j] = v[i];
pozitii[j] = i;
k --;
}
for(i = j; i >= 1; i --)
g << sol[i] << " ";
return 0;
}