Pagini recente » Cod sursa (job #2467359) | Cod sursa (job #3228656) | Cod sursa (job #3201120) | Cod sursa (job #2391275) | Cod sursa (job #2391141)
#include <bits/stdc++.h>
using namespace std;
#define N 100005
int n, M[N], k, prv[N], a[N];
ifstream in ("scmax.in");
ofstream out ("scmax.out");
int bs(int val){
int st = 1, dr = k;
while (st <= dr){
int mid = (st + dr) >> 1;
if (a[M[mid]] < val) st = mid + 1;
else dr = mid - 1;
}
return st;
}
void show(int q){
if (!q) return;
show(prv[q]);
out << a[q] << ' ';
}
int main(){
in >> n;
for (int i=1, x; i<=n; i++){
in >> a[i];
int idx = bs(a[i]);
prv[i] = M[idx-1];
if (idx > k) k = idx, M[k] = i;
else if (a[i] < a[M[idx]]) M[idx] = i;
}
out << k << '\n';
show(M[k]);
return 0;
}