fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. vector<long long int> v;
  5. int n;
  6.  
  7. long long int rec(long long int l,long long int r){
  8. if(l==r) return v[l];
  9. if(l>r) return 0;
  10. long long int m=(l+r)>>1;
  11. long long int out=max(rec(l,m),rec(m+1,r));
  12. long long int pl=m-1,pr=m+1;
  13. long long int big=v[m];
  14. while(l<=pl or pr<=r){
  15. while(l<=pl and v[pl]>=big) pl-=1;
  16. while(r>=pr and v[pr]>=big) pr+=1;
  17. out=max(out,big*(pr-pl-1));
  18. big=(pr>r or l<=pl and v[pl]>=v[pr])?v[pl]:v[pr];
  19. }
  20.  
  21. return out;
  22. }
  23.  
  24. int main() {
  25. ios::sync_with_stdio(0);
  26. cin.tie(0);
  27. cout.tie(0);
  28. cin>>n;
  29. v.resize(n);
  30. for(int i=0;i<n;i++){
  31. cin>>v[i];
  32. }
  33. cout<<rec(0,n-1)<<"\n";
  34. }
Success #stdin #stdout 0.01s 5460KB
stdin
8
2 2 2 2 3 3 3 9
stdout
16