Pagini recente » Cod sursa (job #1219375) | Cod sursa (job #1147829) | Cod sursa (job #2591303) | Cod sursa (job #2121013) | Cod sursa (job #873421)
Cod sursa(job #873421)
#include <fstream>
using namespace std;
const int N = 100001;
int v[N], best[N], T[N], n;
ifstream in("scmax.in");
ofstream out("scmax.out");
int bs(int x, int p){
int i = 0;
for (int step = 1 << 16 ; step ; step >>= 1)
if (i + step <= best[0] && v[ best[i + step] ] < x)
i += step;
return i;
}
void update(int p){
int ans = bs(v[p], p);
if (ans == best[0])
++best[0];
if (ans)
T[p] = best[ans];
best[ans + 1] = p;
}
void build_sol(int x){
if (x == 0)
return;
build_sol(T[x]);
out << v[x] << " ";
}
int main(){
in >> n;
for (int i = 1 ; i <= n ; i++)
in >> v[i];
for (int i = 1 ; i <= n ; i++)
update(i);
out << best[0] << "\n";
build_sol(best[best[0]]);
out << "\n";
return 0;
}