Pagini recente » Cod sursa (job #1332220) | Cod sursa (job #1325525) | Cod sursa (job #2117675) | Cod sursa (job #1685321) | Cod sursa (job #1756776)
#include <fstream>
using namespace std;
int v[100010], c = 1;
int nr[100010];
int prec[100010];
int val[100010];
int poz(int n);
int main()
{
ifstream in("scmax.in");
int n, cit;
nr[0] = -1;
in >> n;
for (int i = 1; i <= n; i++) {
in >> val[i];
cit = poz(val[i]);
nr[cit] = i;
v[cit] = val[i];
prec[i] = nr[cit - 1];
}
ofstream out("scmax.out");
out << c - 1 << '\n';
int r[100010], cont = 0;
int k = nr[c - 1];
while (k != -1) {
r[cont++] = val[k];
k = prec[k];
}
for (int i = cont - 1; i >= 0; i--)
out << r[i] << ' ';
return 0;
}
int poz(int n)
{
int p = 0, q = (1 << 20);
while (q > 0) {
if (p + q < c && v[p + q] < n)
p += q;
q /= 2;
}
p++;
if (p == c)
c++;
return p;
}