#include <iostream>
#include <stack>
#include <vector>
#include <utility>
std::vector<int> leq_subarrays(const std::vector<int>& numbers) {
if (numbers.empty()) {
return std::vector<int>();
}
std::vector<int> answer(numbers.size());
std::stack<std::pair<int, int>> s;
s.push(std::make_pair(numbers[0], 1));
answer[0] = 1;
for (size_t i = 1; i < numbers.size(); ++i) {
const auto& value = numbers[i];
int count = 1;
while (!s.empty() && s.top().first <= value) {
count += s.top().second;
s.pop();
}
s.push(std::make_pair(value, count));
answer[i] = count;
}
return answer;
}
int main() {
std::vector<int> v = { 1,3,4,2, 5 };
auto r = leq_subarrays(v);
for (auto value : r) {
std::cout << value << ' ';
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDx1dGlsaXR5PgoKc3RkOjp2ZWN0b3I8aW50PiBsZXFfc3ViYXJyYXlzKGNvbnN0IHN0ZDo6dmVjdG9yPGludD4mIG51bWJlcnMpIHsKICBpZiAobnVtYmVycy5lbXB0eSgpKSB7CiAgICByZXR1cm4gc3RkOjp2ZWN0b3I8aW50PigpOwogIH0KICBzdGQ6OnZlY3RvcjxpbnQ+IGFuc3dlcihudW1iZXJzLnNpemUoKSk7CiAgc3RkOjpzdGFjazxzdGQ6OnBhaXI8aW50LCBpbnQ+PiBzOwogIHMucHVzaChzdGQ6Om1ha2VfcGFpcihudW1iZXJzWzBdLCAxKSk7CiAgYW5zd2VyWzBdID0gMTsKICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG51bWJlcnMuc2l6ZSgpOyArK2kpIHsKICAgIGNvbnN0IGF1dG8mIHZhbHVlID0gbnVtYmVyc1tpXTsKICAgIGludCBjb3VudCA9IDE7CiAgICB3aGlsZSAoIXMuZW1wdHkoKSAmJiBzLnRvcCgpLmZpcnN0IDw9IHZhbHVlKSB7CiAgICAgIGNvdW50ICs9IHMudG9wKCkuc2Vjb25kOwogICAgICBzLnBvcCgpOwogICAgfQogICAgcy5wdXNoKHN0ZDo6bWFrZV9wYWlyKHZhbHVlLCBjb3VudCkpOwogICAgYW5zd2VyW2ldID0gY291bnQ7CiAgfQogIHJldHVybiBhbnN3ZXI7Cn0KCmludCBtYWluKCkgewogIHN0ZDo6dmVjdG9yPGludD4gdiA9IHsgMSwzLDQsMiwgNSB9OwogIGF1dG8gciA9IGxlcV9zdWJhcnJheXModik7CiAgZm9yIChhdXRvIHZhbHVlIDogcikgewogICAgc3RkOjpjb3V0IDw8IHZhbHVlIDw8ICcgJzsKICB9Cn0=