Pagini recente » Cod sursa (job #3289330) | Cod sursa (job #2351156) | Cod sursa (job #1130535) | Cod sursa (job #1635379) | Cod sursa (job #2306963)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
const int NMAX = 100005;
const int INF = 2000000005;
int n, poz, ret, k;
int v [NMAX], M [NMAX], prevv [NMAX];
int CB (int X){
int st = 1, dr = NMAX - 4;
while (st <= dr){
int mij = (st + dr) / 2;
if (X <= v [M [mij]])
dr = mij - 1, ret = mij;
else st = mij + 1;
}
return ret;
}
int main(){
fin >> n; v [n + 1] = INF;
for (int i = 1; i <= NMAX - 3; i ++)M [i] = n + 1;
for (int i = 1; i <= n; i ++)fin >> v [i];
for (int i = 1; i <= n; i ++){
poz = CB (v [i]);
M [poz] = i;
prevv [i] = M [poz - 1];
}
for (int i = 1; i <= n + 1; i ++)
if (M [i] == n + 1){k = i - 1; break;}
fout << k << '\n';
for (int i = 1; i <= k; i ++)fout << v [M [i]] << " ";
return 0;
}