Pagini recente » Cod sursa (job #2069557) | Cod sursa (job #1235632) | Cod sursa (job #1359910) | Cod sursa (job #3003003) | Cod sursa (job #1834159)
#include <fstream>
using namespace std;
ifstream F ("scmax.in");
ofstream G ("scmax.out");
int poz, n, v[100010], sol[100010], k[100010], st, dr, po, j, mij, pozsol;
pair <int, int> p[100010];
int main()
{
F >> n;
for(int i = 1; i <= n; ++ i)
F >> v[i];
p[1] = make_pair(v[1], 1);
poz = 1;
for(int i = 2; i <= n; ++ i)
{
po = -1;
st = 1; dr = poz;
while (st <= dr)
{
mij = (st + dr) / 2;
if(p[mij].first >= v[i])
po = mij, dr = mij - 1;
else
st = mij + 1;
}
if(po == -1)
p[++ poz] = make_pair(v[i], i), k[i] = p[poz - 1].second;
else
p[po] = make_pair(v[i], i), k[i] = p[po - 1].second;
}
pozsol = poz;
G << pozsol << '\n';
poz = p[poz].second;
while(poz) sol[++ j] = v[poz], poz = k[poz];
for(int i = pozsol; i > 0; -- i)
G << sol[i] << " ";
return 0;
}