Pagini recente » Cod sursa (job #2896647) | Cod sursa (job #55115) | Cod sursa (job #733189) | Cod sursa (job #2754307) | Cod sursa (job #757770)
Cod sursa(job #757770)
#include <cstdio>
#define NMAX 100001
using namespace std;
int n, np = 1, ns = 1, a[NMAX], poz[NMAX], sol[NMAX];
void read() {
int i;
scanf("%d", &n);
for (i=1; i<=n; ++i)
scanf("%d", &a[i]);
}
int cautare_binara(int v) {
int x, y, m;
x = 1; y = ns;
while (x<=y) {
m = (x+y)/2;
if (v == sol[m]) return m;
if (v < sol[m]) y = m-1;
else x = m+1;
}
return x;
}
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 = cautare_binara(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;
}