Pagini recente » Cod sursa (job #465888) | Cod sursa (job #2171610) | Cod sursa (job #2084923) | Cod sursa (job #974971) | Cod sursa (job #2498204)
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");
int n;
int a[NMAX] , pos[NMAX] , ans[NMAX] , aux[NMAX];
int Binary_Search(int val , int &k) {
if(aux[k] < val) {
aux[++k] = val;
return k;
}
int st = 1 , dr = k , mij = 0 , pos = 0;
while(st <= dr) {
mij = (dr - st) / 2 + st;
if(aux[mij] >= val) {
pos = mij;
dr = mij - 1;
}
else
st = mij + 1;
}
aux[pos] = val;
return pos;
}
int main() {
int i , k = 0;
cin >> n;
for(i = 1 ; i <= n ; i++) {
cin >> a[i];
pos[i] = Binary_Search(a[i] , k);
}
int m = k;
for(i = n ; i >= 1 ; i--) {
if (pos[i] == m){
ans[m--] = a[i];
}
}
cout << k << '\n';
for(i = 1 ; i <= k ; i++)
cout << ans[i] << ' ';
return 0;
}