Pagini recente » Cod sursa (job #2484661) | Cod sursa (job #1588120) | Cod sursa (job #1225410) | Cod sursa (job #2168375) | Cod sursa (job #1968384)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("scmax.in"); ofstream g("scmax.out");
int n, nr, st, dr, a[100005], b[100005], c[100005];
int cautbin(int x){
int mij, last = nr;
while (st <= dr) {
mij = (st+dr) / 2;
if (x <= b[mij]) {
last = mij;
st = mij + 1;
}
else {
dr = mij - 1;
}
}
return last;
}
int main(){
int i;
f>>n;
nr = 0;
for(i = 1; i <= n; ++i) {
f>>a[i];
}
for(i = 1; i <= n; ++i) {
st = 1;
dr = nr;
int p = cautbin(a[i]);
if (p == nr && b[p]<a[i]) {
++nr;
++p;
}
b[p] = a[i];
c[i] = p;
}
int j = n;
for(i = nr; i >= 1; --i) {
do {
if (c[j] == i) {
b[i] = a[j];
}
else {
--j;
}
} while(c[j] != i);
}
g<<nr<<'\n';
for(i = 1; i <= nr; ++i) {
g<<b[i]<<' ';
}
return 0;
}