Advertisement
a_pramanik

Histogram

Jun 13th, 2016
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.88 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define pb push_back
  5. #define ll long long int
  6. #define inf -2000000000
  7. #define pi (2.0*acos(0.0))
  8. #define vsort(v)   sort(v.begin(),v.end())
  9. #define ull unsigned long long int
  10. #define mem(a, b) memset(a, b, sizeof a)
  11.  
  12. ll a[100], lft[100], r8[100], ind[100];
  13. ll n, i, j, k, p, q;
  14.  
  15. stack<ll>s;
  16.  
  17. int main()
  18.  
  19. {
  20.         while(scanf("%lld", &n)==1){
  21.  
  22.             for(i=1; i<=n; i++)scanf("%lld", &a[i]);
  23.  
  24.             s.push(inf);
  25.  
  26.             ind[0]=0;
  27.  
  28.             for(i=1; i<=n; i++){
  29.                 while(1){
  30.                     if(s.top()>=a[i])s.pop();
  31.                     else{
  32.                         s.push(a[i]);
  33.                         ind[s.size()-1]=i;
  34.                         lft[i]=ind[s.size()-2]+1;
  35.                         break;
  36.                     }
  37.                 }
  38.             }
  39.  
  40.             /*for(i=1; i<=n; i++)printf("%lld ", lft[i]);
  41.             printf("\n");*/
  42.  
  43.  
  44.             while(!s.empty())s.pop();
  45.  
  46.  
  47.             mem(ind, 0);
  48.             s.push(inf);
  49.             ind[0]=n+1;
  50.  
  51.             for(i=n; i>=1; i--){
  52.  
  53.                 if(a[i]<s.top())s.pop();
  54.  
  55.                 while(1){
  56.                     if(a[i]<=s.top())s.pop();
  57.  
  58.                     else{
  59.                         s.push(a[i]);
  60.                         ind[s.size()-1]=i;
  61.                         r8[i]=ind[s.size()-2]-1;
  62.                         break;
  63.                     }
  64.  
  65.                 }
  66.  
  67.             }
  68.  
  69.             /*for(i=1; i<=n; i++)printf("%lld ",r8[i]);
  70.             printf("\n\n");*/
  71.  
  72.             ll mx = 0;
  73.             for(i=1; i<=n; i++){
  74.                 mx = max(mx, ((r8[i]-lft[i])+1)*a[i]);
  75.                 printf("%lld ",((r8[i]-lft[i]+1)*a[i]));
  76.             }
  77.             printf("\n");
  78.             /*printf("%lld\n", mx);*/
  79.  
  80.             while(!s.empty())s.pop();
  81.  
  82.         }
  83.         return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement