Pagini recente » Cod sursa (job #1147767) | Cod sursa (job #1814477) | Cod sursa (job #1210708) | Cod sursa (job #1862864) | Cod sursa (job #2966838)
#include <fstream>
using namespace std;
const int N = 1e5 + 1;
ifstream in("scmax.in");
ofstream out("scmax.out");
int x[N], lung[N], valmin[N];
void refs(int p, int val, int l)
{
if (l == 1)
return;
if (x[p] < val && lung[p] == l - 1)
{
refs(p - 1, x[p], lung[p]);
out << x[p] << " ";
}
else
refs(p - 1, val, l);
}
int caut_bin(int v[N], int n, int val)
{
int st = 1, dr = n, rez = 0;
while (st <= dr)
{
int m = (st + dr) / 2;
if (v[m] < val)
{
rez = m;
st = m + 1;
}
else
dr = m - 1;
}
return rez;
}
int main()
{
int n, pmax = 1;
in >> n;
int nvalm = 0;
for (int i = 1; i <= n; i++)
{
in >> x[i];
int jz = caut_bin(valmin, nvalm, x[i]);
if (jz == nvalm)
nvalm++;
lung[i] = 1 + jz;
valmin[1 + jz] = x[i];
if (lung[i] > lung[pmax])
pmax = i;
}
in.close();
out << lung[pmax] << "\n";
refs(pmax, x[pmax] + 1, lung[pmax] + 1);
out.close();
return 0;
}