Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- using namespace std;
- int main()
- {
- ll n, ans = -1e18;
- cin >> n;
- vector<pair<ll, ll>> v(n);
- for (ll i = 0; i < n; i++)
- {
- cin >> v[i].first;
- v[i].second = i + 1;
- }
- stack<pair<ll, ll>> S1, S2;
- vector<ll> a, b;
- for (ll i = 0; i < n; i++)
- {
- while (!S1.empty() && S1.top().first >= v[i].first)
- {
- S1.pop();
- }
- if (S1.empty())
- {
- a.push_back(0);
- }
- else
- {
- a.push_back(S1.top().second);
- }
- S1.push(v[i]);
- }
- for (ll i = n - 1; i >= 0; --i)
- {
- while (!S2.empty() && S2.top().first >= v[i].first)
- {
- S2.pop();
- }
- if (S2.empty())
- {
- b.push_back(n + 1);
- }
- else
- {
- b.push_back(S2.top().second);
- }
- S2.push(v[i]);
- }
- reverse(b.begin(), b.end());
- for (ll i = 0; i < n; i++)
- {
- ans = max(ans, v[i].first * (b[i] - a[i] - 1));
- }
- cout << ans << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement