Pagini recente » Cod sursa (job #1738003) | Cod sursa (job #997680) | Cod sursa (job #2074639) | Cod sursa (job #1260666) | Cod sursa (job #703340)
Cod sursa(job #703340)
#include <fstream>
using namespace std;
ifstream in ("scmax.in");
ofstream out ("scmax.out");
const int N = 100001;
int v[N], n, m, x[N], pred[N];
void subsir(int p) {
if (pred[p]!=0)
subsir (pred[p]);
out << v[p] << " ";
}
int caut(int val) {
int i, pas=1<<16;
for (i=0; pas!=0; pas/=2)
if (i+pas<=m && v[x[i+pas]]<val)
i+=pas;
return i;
}
int main() {
in >> n;
for (int i=1; i<=n; i++)
in >> v[i];
m = 0;
x[++m] = 1;
for (int i=2; i<=n; i++) {
int j=caut(v[i]);
x[j+1]=i;
pred[i]=x[j];
if ( j==m ) {++m;}
}
out << m << "\n";
subsir(x[m]);
}