Pagini recente » oji2015 | Cod sursa (job #926401) | Cod sursa (job #132724) | Cod sursa (job #2178231) | Cod sursa (job #2616517)
#include <iostream>
#include <fstream>
using namespace std;
struct element {
int val, lvp; // valoarea, locul vecinului preferat
};
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, ns, a, lv, sol[100001], v[10001]; // varfuri
element e[100001];
bool gasita;
int main() {
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> a;
gasita = false;
for (int is = 1; is <= ns and not gasita; is++) {
if (a <= e[v[is]].val) {
v[is] = i; // locul in sirul initial al elementului din varful stivei
e[i] = {a, v[is - 1]}; gasita = true;
}
}
if (not gasita) {
ns++; v[ns] = i; e[i] = {a, v[ns - 1]};
}
}
lv = v[ns]; // locul vecinului preferat
for (int is = ns; is >= 1; is--) {
sol[is] = e[lv].val;
lv = e[lv].lvp;
}
fout << ns << '\n';
for (int i = 1; i <= ns; i++)
fout << sol[i] << ' ';
return 0;
}