Guest User

Largest Rectangle in a Histogram

a guest
Jun 19th, 2015
788
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.83 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long int
  4. ll arr[100005];
  5. struct data
  6. {
  7.     ll sum,mini;
  8. };
  9. data tree[4*100000];
  10. void build(ll node, ll b, ll e)
  11. {
  12.     if(b==e)
  13.     {
  14.         tree[node].sum=tree[node].mini=arr[b];
  15.         return;
  16.     }
  17.     ll left,right,mid;
  18.  
  19.     mid=(b+e)/2;
  20.  
  21.     left=2*node;
  22.     right=2*node+1;
  23.  
  24.     build(left,b,mid);
  25.     build(right,mid+1,e);
  26.  
  27.     tree[node].mini=min(tree[left].mini,tree[right].mini);
  28.     tree[node].sum=max( max(tree[left].sum,tree[right].sum),tree[node].mini*(e-b+1) );
  29. }
  30.  
  31. int main()
  32. {
  33.     ll n,m,i,j;
  34.     while(scanf("%lld",&n) && n)
  35.     {
  36.         memset(tree,0,sizeof tree);
  37.         for(i=1;i<=n;i++)
  38.         {
  39.             scanf("%lld",&arr[i]);
  40.         }
  41.         build(1,1,n);
  42.         printf("%lld\n",tree[1].sum);
  43.     }
  44.     return 0;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment