Pagini recente » Cod sursa (job #925801) | Cod sursa (job #403551) | Cod sursa (job #2724692) | Cod sursa (job #2083986) | Cod sursa (job #3123381)
#include <fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
const int NMAX = 1e5;
int n, m, a[NMAX + 5];
int d_ind[NMAX + 5], indD;
int previ_ind[NMAX + 5];
int rez[NMAX + 5], indrez;
int CB(int value)
{
int st = 1, dr = indD, poz = 0;
while (st <= dr)
{
int mij = (st + dr) / 2;
if (a[d_ind[mij]] > value)
poz = mij, dr = mij - 1;
else
st = mij + 1;
}
return poz;
}
int main()
{
cin >> n;
for(int i = 1; i <= n; i++)
cin >> a[i];
a[0] = -1;
for (int i = 1; i <= n; i++)
{
if (a[i] > a[d_ind[indD]])
{
previ_ind[i] = d_ind[indD];
d_ind[++indD] = i;
}
else
{
int poz = CB(a[i]);
previ_ind[i] = d_ind[poz - 1];
d_ind[poz] = i;
}
}
indrez = indD;
for (int i = d_ind[indD]; i > 0; i = previ_ind[i], indrez--)
rez[indrez] = a[i];
cout << indD << '\n';
for (int i = 1; i <= indD; i++)
cout << rez[i] << ' ';
return 0;
}