Pagini recente » Cod sursa (job #1446914) | Cod sursa (job #2632800) | Cod sursa (job #1697314) | Cod sursa (job #1666458) | Cod sursa (job #813064)
Cod sursa(job #813064)
#include <stdio.h>
#define N_MAX 100010
int v[N_MAX], best[N_MAX], pre[N_MAX];
int k, n, pozSol;
void add(int x, int p) {
int step = 0, poz = 0;
for( ; (1<<step) < k; step++);
for(int i = step; i >= 0; i--) {
if( poz + (1<<i) <= k && v[best[poz + (1<<i)]] < x) {
poz += (1<<i);
}
}
poz++;
if(poz > k) {
k++;
pozSol = p;
}
best[poz] = p;
pre[p] = best[poz-1];
}
void afisare(int p) {
if(p == 0) return ;
afisare(pre[p]);
printf("%d ", v[p]);
}
int main() {
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d", &v[i]);
add(v[i], i);
}
printf("%d\n", k);
afisare(pozSol);
return 0;
}