Pagini recente » Cod sursa (job #2886968) | Cod sursa (job #2596444) | Cod sursa (job #2909989) | Cod sursa (job #2836940) | Cod sursa (job #1241156)
#include <iostream>
#include <fstream>
using namespace std;
#define size 200000
int dim, n;
int val[size], st[size], last[size];
int searchPoz(int poz) {
int power = 1, s = 0;
for (; power*2 <= dim; power *= 2);
for (; power; power /=2) {
if (power + s <= dim && val[st[power+s]] < val[poz]) {
s += power;
}
}
s ++;
if (s > dim) {
dim ++;
}
return s;
}
void solve() {
dim = 1;
st[1] = 1;
for (int i =2; i <= n; i++) {
int poz = searchPoz(i);
st[poz] = i;
last[i] = st[poz - 1];
}
}
void afisare() {
ofstream g("scmax.out");
g << dim << '\n';
int poz = st[dim];
for (; dim; dim --) {
g << val[poz] << ' ';
poz = last[poz];
}
g.close();
}
void citire() {
ifstream f("scmax.in");
f >> n ;
for (int i = 1; i <=n ;i ++) {
f >> val[i];
}
f.close();
}
int main() {
citire();
solve();
afisare();
return 0;
}