Pagini recente » Cod sursa (job #1371960) | Cod sursa (job #1468763) | Monitorul de evaluare | Cod sursa (job #2871273) | Cod sursa (job #2587203)
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[NMAX], poz[NMAX], rez[NMAX], n, i, st, dr, mij, nr = 1, p, k;
int main()
{
f >> n;
for(i = 1; i <= n; ++ i)
f >> v[i];
rez[1] = v[1];
poz[1] = 1;
for(i = 2; i <= n; ++ i)
{
p = -1;
st = 1;
dr = nr;
while(st <= dr)
{
mij = (st + dr) / 2;
if(rez[mij] < v[i])
st = mij + 1;
else
{
p = mij;
dr = mij - 1;
}
}
if(p == -1)
{
rez[++ nr] = v[i];
poz[i] = nr;
}
else
{
poz[i] = p;
rez[p] = v[i];
}
}
g << nr << "\n";
for(i = n; i >= 1; i --)
if(poz[i] == nr)
{
rez[++ k] = v[i];
nr --;
}
for(i = k; i >= 1; i --)
g << rez[i] << " ";
return 0;
}