Pagini recente » Cod sursa (job #138823) | Cod sursa (job #2529623) | Cod sursa (job #637741) | Cod sursa (job #896248) | Cod sursa (job #2696464)
#include <bits/stdc++.h>
using namespace std;
#define x1 "scmax.in"
#define x2 "scmax.out"
ifstream in(x1);
ofstream out(x2);
#define NMAX 100000
#define POW2 1 << 16
int v[NMAX], ls[NMAX], maxi[NMAX], mx, ans[NMAX];
int cautbin(int x) {
int r = -1, pas;
pas = POW2;
while(pas > 0) {
if(r + pas < mx && v[maxi[r + pas]] < x)
r += pas;
pas /= 2;
}
return r + 1;
}
void rasp(int poz) {
if(poz != -1) {
rasp(ls[poz]);
out << v[poz] << " ";
}
}
int main() {
int n, i, j, ind;
in >> n;
for(i = 0; i < n; i++)
in >> v[i];
for(i = 0; i < n; i++) {
ind = cautbin(v[i]);
mx = max(mx, ind + 1);
maxi[ind] = i;
if(ind > 0)
ls[i] = maxi[ind - 1];
else
ls[i] = -1;
}
out << mx << '\n';
rasp(maxi[mx - 1]);
return 0;
}