Pagini recente » Cod sursa (job #1157534) | Cod sursa (job #966993) | Cod sursa (job #3257868) | Cod sursa (job #1329803) | Cod sursa (job #2266648)
#include <bits/stdc++.h>
using namespace std;
int main() {
ifstream cin("subsir2.in");
ofstream cout("subsir2.out");
int n; cin >> n;
vector<int> v(n), stk, nxt(n), len(n + 1, 0), cnt(n + 1, 0);
for (int i = 0; i < n; ++i) {
cin >> v[i];
}
for (int i = n - 1; i >= 0; --i) {
while (stk.size() && v[stk.back()] < v[i])
stk.pop_back();
nxt[i] = stk.size() ? stk.back() : n;
len[i] = 1 + len[nxt[i]];
cnt[len[i]] += 1;
stk.push_back(i);
}
for (auto x : len) {
cout << x << " ";
}
cout << endl;
int at = 0;
auto adv = [&]() { --cnt[len[at++]]; };
cout << len[0] << endl;
for (int l = len[0]; l > 0; --l) {
while (cnt[l] > 0) adv();
int choose = at - 1;
cout << choose + 1 << " ";
while (at < nxt[choose]) adv();
}
return 0;
}