Pagini recente » Cod sursa (job #37474) | Cod sursa (job #33887) | Cod sursa (job #725192) | Cod sursa (job #2790870) | Cod sursa (job #2493628)
#include <bits/stdc++.h>
using namespace std;
int x[100005], v[100005], l, pred[100005];
int cautbin(int val) {
if (val > v[x[l]]) {
return l + 1; }
int st =1;
int dr = l + 1;
int m;
while (st < dr) {
m = (st + dr) / 2;
if ( v[x[m]] >= val)
dr = m;
else
st = m + 1; }
return st; }
void subsir(int p) {
if (p == 0) {
return; }
subsir(pred[p]);
printf("%d ", v[p]); }
int main() {
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int n, j;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &v[i]); }
x[++l] = 1;
for(int i = 2; i <= n; i++) {
j = cautbin(v[i]);
pred[i] = x[j - 1];
if(j > l) {
l = j; }
x[j] = i; }
printf("%d\n", l);
subsir(x[l]);
return 0; }