Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. class Solution {
  2. public:
  3. vector<int> bit;
  4. void up(int idx,int val)
  5. {
  6. for(int i=idx;i<bit.size();i+=(i&-i)) bit[i] = min(bit[i],val);
  7. }
  8. int read(int idx)
  9. {
  10. int res = bit.size();
  11. for(int i=idx;i>0;i-=(i&-i)) res = min(res,bit[i]);
  12. return res;
  13. }
  14. int maxArea(vector<int>& height) {
  15. bit.assign(height.size()+7,height.size()+7);
  16.  
  17. vector<int>tmp = height;
  18. sort(tmp.begin(),tmp.end());
  19. int sz = unique(tmp.begin(),tmp.end()) - tmp.begin();
  20.  
  21. int res = 0;
  22.  
  23. for(int i=0;i<height.size();i++)
  24. {
  25. int mpv = lower_bound(tmp.begin(),tmp.begin()+sz,height[i]) - tmp.begin() + 1;
  26. int rev_id = height.size() - mpv + 1;
  27. int pos = read(rev_id);
  28. if(pos<i) res = max(res,(i - pos) * height[i]);
  29. up(rev_id,i);
  30. }
  31.  
  32.  
  33. bit.assign(height.size()+7,height.size()+7);
  34. reverse(height.begin(),height.end());
  35.  
  36. for(int i=0;i<height.size();i++)
  37. {
  38. int mpv = lower_bound(tmp.begin(),tmp.begin()+sz,height[i]) - tmp.begin() + 1;
  39. int rev_id = height.size() - mpv + 1;
  40. int pos = read(rev_id);
  41. if(pos<i) res = max(res,(i - pos) * height[i]);
  42. up(rev_id,i);
  43. }
  44.  
  45.  
  46. return res;
  47. }
  48. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement