Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cmath>
- #include <cstdlib>
- #include <vector>
- #include <iostream>
- #include <cstring>
- #include <algorithm>
- #include <queue>
- #include <set>
- #include <map>
- #include <stack>
- using namespace std;
- #define x first
- #define y second
- #define mp make_pair
- #define pb push_back
- typedef pair<int, int> ii;
- const int INF = 0x3f3f3f3f;
- int main() {
- std::ios::sync_with_stdio(false);
- int n;
- cin >> n;
- vector<int> v(n), res(n + 1), left(n);
- for (int i = 0; i < n; i++) {
- cin >> v[i];
- }
- stack<ii> s;
- for (int i = 0; i < n; i++) {
- int last;
- for (; s.size() > 0 && v[i] <= s.top().x; s.pop());
- if (!s.size()) {
- last = 0;
- } else {
- last = s.top().y + 1;
- }
- s.push(mp(v[i], i));
- left[i] = last;
- }
- for (; s.size(); s.pop());
- for (int i = n - 1; i >= 0; i--) {
- int last;
- for (; s.size() > 0 && v[i] <= s.top().x; s.pop());
- if (!s.size()) {
- last = n - 1;
- } else {
- last = s.top().y - 1;
- }
- s.push(mp(v[i], i));
- res[last - left[i] + 1] = max(res[last - left[i] + 1], v[i]);
- }
- for (int i = n - 1; i; i--) {
- res[i] = max(res[i], res[i + 1]);
- }
- for (int i = 1; i <= n; i++) {
- cout << res[i] << " ";
- }
- cout << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement