Pagini recente » Cod sursa (job #3200478) | Cod sursa (job #2780528) | Cod sursa (job #3190107) | Cod sursa (job #676909) | Cod sursa (job #934590)
Cod sursa(job #934590)
#include <fstream>
#define MAX 100005
using namespace std;
int N, NPoz, step, V[MAX], ans[MAX];
void citire() {
ifstream in("scmax.in");
in>>N;
for(int i = 1; i <= N; i++) in>>V[i];
in.close();
}
inline int searchPoz(int val) {
int poz = 0;
for(int st = step; st; st >>= 1) {
if(st + poz <= NPoz && ans[st + poz] < val) poz += st;
} return poz + 1;
}
void solve() {
step = 1;
for(int i = 1; i <= N; i++) {
int poz = searchPoz(V[i]);
if(poz > NPoz) {
ans[++NPoz] = V[i];
if(step << 1 == NPoz) step <<= 1;
} else ans[NPoz] = min(ans[NPoz], V[i]);
}
}
void afisare() {
ofstream out("scmax.out");
out<<NPoz<<"\n";
for(int i = 1; i <= NPoz; i++)
out<<ans[i]<<" ";
out.close();
}
int main() {
citire();
solve();
afisare();
return 0;
}