Pagini recente » Cod sursa (job #2548155) | Cod sursa (job #2703872) | Cod sursa (job #2883279) | Cod sursa (job #729416)
Cod sursa(job #729416)
#include <cstdio>
#define NMAX 100001
using namespace std;
int n, np, ns, a[NMAX], poz[NMAX], sol[NMAX];
void read() {
int i;
scanf("%d", &n);
for (i=1; i<=n; ++i)
scanf("%d", &a[i]);
}
int binary_search(int v) {
int x, y, m;
x = 1; y = ns;
while (x<y) {
m = (x+y)/2;
if (v == a[m]) return v;
if (v < a[m]) y = m-1;
else x = m+1;
}
return y;
}
void solve() {
int i, x;
poz[1] = 1;
sol[1] = a[1];
for (i=2; i<=n; ++i) {
if (a[i] > sol[ns]) {
sol[++ns] = a[i];
poz[i] = ns;
}
else {
x = binary_search (a[i]);
sol[x] = a[i];
poz[i] = x;
}
}
}
void afis() {
int i;
printf("%d\n", ns);
int sf[NMAX];
int l = ns;
for (i=n; i>=1; --i)
if (poz[i] == ns) {
sf[ns] = a[i];
--ns;
}
for (i=1; i<=l; ++i)
printf("%d ",sf[i]);
}
int main () {
freopen("scmax.in","r",stdin);
read();
fclose(stdin);
solve();
freopen("scmax.out","w",stdout);
afis();
fclose(stdout);
return 0;
}