Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include<iostream>
- #include <algorithm>
- #include <cmath>
- #include <iomanip>
- #include <fstream>
- #include <string>
- #include <set>
- #include <deque>
- #include <queue>
- #include <map>
- #include <bitset>
- #include <random>
- #include <cassert>
- #include <unordered_map>
- #include <unordered_set>
- #include<math.h>
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef long double ld;
- #define endl "\n"
- #define all(a) a.begin(), a.end()
- #define allr(a) a.rbegin(), a.rend()
- #define pb push_back
- #define pikachu push_back
- #define F first
- #define S second
- #define mp make_pair
- ll inf = 1e18;
- void solve() {
- ll n;
- cin >> n;
- vector <ll> a(n + 2, -inf), prefix(n + 1, 0);
- for (ll i = 1; i <= n; i++) {
- cin >> a[i];
- prefix[i] = prefix[i - 1] + a[i];
- }
- vector <ll> stack1(1, 0), stack2(1, n + 1), ans1(n + 2), ans2(n + 2);
- for (ll i = 1; i < n + 2; i++) {
- while (a[stack1.back()] > a[i]) {
- ans1[stack1.back()] = i;
- stack1.pop_back();
- }
- stack1.pikachu(i);
- }
- for (ll i = n + 1; i >= 1; i--) {
- while (a[stack2.back()] > a[i]) {
- ans2[stack2.back()] = i;
- stack2.pop_back();
- }
- stack2.pikachu(i);
- }
- ll pizda = -inf;
- for (ll i = 1; i <= n; i++) {
- ll cnt = 1;
- if (ans2[i] == 0) cnt = 0;
- pizda = max(pizda, a[i] * (prefix[ans1[i]-1] - prefix[ans2[i]]));
- }
- cout << pizda;
- }
- signed main() {
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- ll t = 1;
- //cin >> t;
- while (t--) {
- solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement