Pagini recente » Cod sursa (job #3143681) | Cod sursa (job #2784981) | Cod sursa (job #870204) | Rating Maria beju (mary99) | Cod sursa (job #934593)
Cod sursa(job #934593)
#include <fstream>
#define MAX 100005
using namespace std;
int N, NPoz, step, V[MAX], ans[MAX], dad[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 && V[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]);
dad[i] = ans[poz - 1];
if(poz > NPoz) {
ans[++NPoz] = i;
if(step << 1 == NPoz) step <<= 1;
} else ans[poz] = (V[i] < V[ans[poz]] ? i : ans[poz]);
}
}
ofstream out("scmax.out");
void afisare(int el) {
if(!el) return;
afisare(dad[el]);
out<<V[el]<<" ";
}
void afisare() {
out<<NPoz<<"\n";
afisare(ans[NPoz]);
out.close();
}
int main() {
citire();
solve();
afisare();
return 0;
}