Pagini recente » Cod sursa (job #2042884) | Cod sursa (job #2258759) | Cod sursa (job #693330) | Cod sursa (job #1093978) | Cod sursa (job #2354977)
#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;
int cautbinar(int x);
int main()
{
int i, x, pozitia, elemcur;
fin >> n;
for (i = 1; i <= n; i ++)
fin >> a[i];
for (i = 1; i <= n; i ++)
{
x = a[i];
if (x >= C[lgc])
C[++ lgc] = x;
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;
}