Pagini recente » Cod sursa (job #2373305) | Cod sursa (job #1588459) | Cod sursa (job #2604099) | Cod sursa (job #210989) | Cod sursa (job #1822475)
#include <cstdio>
using namespace std;
int v[100005];
int bs(int st, int dr, int val) {
int last = 0, med;
while(st <= dr) {
med = (st + dr) / 2;
if(v[med] < val) {
last = med;
st = med + 1;
} else {
dr = med - 1;
}
}
return last + 1;
}
int main() {
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int n, a, st, dr, aux;
scanf("%d", &n);
st = 1;
dr = 0;
for(int i = 1; i <= n; ++ i) {
scanf("%d", &a);
aux = bs(st, dr, a);
if(aux == dr + 1) {
++ dr;
}
v[aux] = a;
}
for(int i = 2; i <= dr; ++ i) {
if(v[i] <= v[i - 1])
return 0;
}
printf("%d\n", dr);
for(int i = 1; i <= dr; ++ i) {
printf("%d ", v[i]);
}
return 0;
}