Pagini recente » Cod sursa (job #360328) | Cod sursa (job #1321862) | Cod sursa (job #2178916) | Cod sursa (job #2326130) | Cod sursa (job #1015950)
#include <fstream>
#define nmax 100005
using namespace std;
int Q[nmax], P[nmax], a[nmax];
int n;
ofstream fout("scmax.out");
void citire()
{
ifstream fin("scmax.in");
fin >> n;
for (int i = 1; i <= n; i++)
fin >> a[i];
}
int cautare_binara(int st, int dr, int x)
{
int mijl = (st+dr)/2;
if (st == dr || st > dr)
{
return st;
}
if (x < a[mijl])
return cautare_binara(st, mijl-1, x);
else return cautare_binara(mijl+1, dr, x);
}
void rezolvare()
{
for (int i = 1; i <= n; i++)
{
/// P[i] = pozitia lui a[i] in Q
P[i] = cautare_binara(1, Q[0], a[i]);
if (P[i] > Q[0] || a[i] > Q[Q[0]])
P[i] = ++Q[0];
Q[P[i]] = a[i];
}
}
void afisare(int i, int indx)
{
while (i >= 1 && indx >= 1)
{
if (P[i] == indx)
{
afisare(i-1,indx-1);
fout << a[i] << ' ';
return;
}
i--;
}
}
int main()
{
citire();
rezolvare();
fout << Q[0] << '\n';
afisare(n, Q[0]);
return 0;
}