Advertisement
tungSfer

Untitled

May 17th, 2021
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define ll long long
  4. #define el endl
  5. #define umi unordered_map<int, int>
  6. #define umll unordered_map<ll, ll>
  7. #define all(vect) vect.begin(), vect.end()
  8. #define reset(A) memset(A, 0, sizeof(A))
  9. #define approx(n) fixed << setprecision(n)
  10.  
  11. const int mod = 1e9 + 7;
  12.  
  13. using namespace std;
  14.  
  15. void solve()
  16. {
  17.     int n;
  18.     cin >> n;
  19.     int a[n + 1];
  20.     for(int i = 1; i <= n; i++)
  21.     {
  22.         cin >> a[i];
  23.     }
  24.     int r[n + 1];
  25.     int l[n + 1];
  26.     reset(l);
  27.     reset(r);
  28.     stack<int> st, sh;
  29.     st.push(1);
  30.     for(int i = 2; i <= n; i++)
  31.     {
  32.         if(a[i] > a[st.top()])
  33.         {
  34.             l[i] = st.top();
  35.             st.push(i);
  36.         }
  37.         else
  38.         {
  39.             while(a[st.top()] >= a[i])
  40.             {
  41.                 st.pop();
  42.                 if(st.empty())
  43.                     break;
  44.             }
  45.             if(st.empty())
  46.                 l[i] = 0;
  47.             else
  48.                 l[i] = st.top();
  49.             st.push(i);
  50.         }
  51.     }
  52. //  for(int i = 1; i <= n; i++)
  53. //      cout << l[i] << " ";
  54.     r[n] = n + 1;
  55.     sh.push(n);
  56.     for(int i =  n - 1; i > 0; i--)
  57.     {
  58.         if(a[i] > a[sh.top()])
  59.         {
  60.             r[i] = sh.top();
  61.             sh.push(i);
  62.         }
  63.         else
  64.         {
  65.             while(a[sh.top()] >= a[i])
  66.             {
  67.                 sh.pop();
  68.                 if(sh.empty())
  69.                     break;
  70.             }
  71.             if(sh.empty())
  72.                 r[i] = n + 1;
  73.             else
  74.                 r[i] = sh.top();
  75.             sh.push(i);
  76.         }
  77.     }
  78. //  cout << el;
  79. //  for(int i = 1; i <= n; i++)
  80. //      cout << r[i] << " ";
  81.     int maxx = 0;
  82.     for(int i = 1; i <= n; i++)
  83.     {
  84.         maxx = max(maxx, (r[i] - l[i] - 1) * a[i]);
  85.     }
  86.     cout << maxx << el;
  87. }
  88.  
  89. int main()
  90. {
  91.     int t = 1;
  92.     cin >> t;
  93. //  cin.ignore();
  94.     while(t--)
  95.     {
  96.         solve();
  97.     }
  98.     return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement