Pagini recente » Cod sursa (job #2306437) | Cod sursa (job #2526693) | Cod sursa (job #2971249) | Cod sursa (job #2526746) | Cod sursa (job #1020173)
#include <fstream>
#include <algorithm>
#define FOR(i, a, b) for(int i = (a); i <= (b); i++)
#define inf ~(1 << 31)
#define nmax 100000+5
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[nmax];
int secv[nmax];
int poz[nmax];
int n;
void citire()
{
fin >> n;
FOR(i, 1, n)
fin >> a[i];
}
void inserare_binara(int i)
{
int st = 1, dr = *secv;
int mijl;
int x = a[i];
while (st <= dr)
{
mijl = (st + dr) / 2;
if (x < secv[mijl])
dr = mijl-1;
else if (x > secv[mijl])
st = mijl+1;
else
{
st = mijl;
break;
}
}
secv[st] = x;
*secv = max(*secv, st);
poz[i] = st;
}
void rezolvare()
{
secv[++secv[0]] = a[1];
poz[1] = 1;
FOR(i, 2, n)
inserare_binara(i);
}
void afisare_rec(int indx, int lg)
{
while (indx >= 1 && poz[indx] != lg) indx--;
if (indx)
{
afisare_rec(indx-1, lg-1);
fout << a[indx] << ' ';
}
}
void afisare()
{
fout << *secv << '\n';
afisare_rec(n, *secv);
}
int main()
{
citire();
rezolvare();
afisare();
return 0;
}