Advertisement
vaidesh

Rain water trapping

Jan 13th, 2021
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.20 KB | None | 0 0
  1. // https://www.youtube.com/watch?v=FbGG2qpNp4U&list=PL_z_8CaSLPWdeOezg68SKkeLN4-T_jNHd&index=9&ab_channel=AdityaVerma
  2.  
  3. #include<bits/stdc++.h>
  4. using namespace std;
  5.  
  6. int main(){
  7.  
  8.     #ifndef ONLINE_JUDGE
  9.         freopen("input.txt","r",stdin);
  10.         freopen("output.txt","w",stdout);
  11.     #endif
  12.  
  13.     int n;
  14.     cin>>n;
  15.  
  16.     int *arr = new int[n];
  17.     for(int i=0; i<n; i++) cin>>arr[i];
  18.  
  19.     stack<int> s;
  20.     int ttl=0,sumTill=0;
  21.     set<int> inds;
  22.  
  23.     s.push(0);
  24.  
  25.     for(int i=1; i<n; i++){
  26.         if(arr[i]<=arr[s.top()]){
  27.             sumTill+=arr[i];
  28.         }else{
  29.             ttl+=(i-s.top()-1)*arr[s.top()] - sumTill;
  30.             sumTill=0;
  31.             inds.insert(i);
  32.             s.pop();
  33.             s.push(i);
  34.         }
  35.  
  36.     }
  37.  
  38.     sumTill=0;
  39.  
  40.     while(!s.empty()) s.pop();
  41.     s.push(n-1);
  42.     for(int i=n-2; i>=0; i--){
  43.         if(arr[i]<=arr[s.top()]){
  44.             sumTill+=arr[i];
  45.         }else{
  46.             ttl+=(s.top()-i-1)*arr[s.top()] - sumTill;
  47.             sumTill=0;
  48.            
  49.             if(inds.find(i) != inds.end()) break;
  50.             s.pop();
  51.             s.push(i);
  52.         }
  53.     }
  54.  
  55.     cout<<ttl<<endl;
  56.  
  57.     delete[] arr;
  58.  
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement