Pagini recente » Cod sursa (job #1942503) | Cod sursa (job #764261) | Cod sursa (job #2741307) | Cod sursa (job #895633) | Cod sursa (job #2355015)
#include <fstream>
#define LMAX 1000005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[LMAX], C[LMAX], poz[LMAX];
int n, lgc = 1;
int cautbinar(int x);
int main()
{
int i, x, pozitia, elemcur;
fin >> n;
for (i = 1; i <= n; i ++)
fin >> a[i];
C[1] = a[1];
poz[1] = 1;
for (i = 2; i <= n; i ++)
{
x = a[i];
if (x > C[lgc])
{
C[++ lgc] = x;
poz[i] = lgc;
}
else
{
pozitia = cautbinar(x);
C[pozitia] = x;
poz[x] = pozitia;
}
}
fout << lgc << '\n';
elemcur = lgc;
for (i = n; i >= 1; i --)
{
if (poz[i] == elemcur)
{
C[elemcur] = a[i];
elemcur --;
}
}
for (i = 1; i <= lgc; i ++)
fout << C[i] << ' ';
return 0;
}
int cautbinar(int x)
{
int st, dr, mij;
for (st = 0, dr = lgc + 1; dr - st > 1;)
{
mij = (st + dr) / 2;
if (x > C[mij])
st = mij;
else
dr = mij;
}
return dr;
}