#include <iostream>
#include <vector>
using namespace std;
// created a function of vector of integers 'height' and it returns the amout of water trapped
int trap(vector<int> & height){
if(height.empty())
return 0;
// created 2 pointers : 'left', 'right'
// initializing the left and left so that we can track left and right pointers
int left = 0, right = height.size() - 1;
//also initialized max_left, max_right and the amout of water trapped
int max_left = 0, max_right = 0;
int water_trapped = 0;
//now while loop will run until the left pointer is less than or equal to the right pointer
while (left <= right) {
if (height[left] <= height[right]) {
//left side height is greater than max_left
if (height[left] > max_left)
// update it to the current height
max_left = height[left];
else
// we are calculating the water trapped
water_trapped += max_left - height[left];
left++;
} else {
// same thing as we did above we are again doing it if we are processing from the right hand side
if (height[right] > max_right)
max_right = height[right];
else
water_trapped += max_right - height[right];
right--;
}
}
return water_trapped;
}
int main(){
// in the main func we are simply passing the values
vector<int> height = {3,1,2,4,0,2,1,3};
// after initializing we passed to the trap func and printing the output using cout func
cout << trap(height) << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLy8gY3JlYXRlZCBhIGZ1bmN0aW9uIG9mIHZlY3RvciBvZiBpbnRlZ2VycyAnaGVpZ2h0JyBhbmQgaXQgcmV0dXJucyB0aGUgYW1vdXQgb2Ygd2F0ZXIgdHJhcHBlZCAKaW50IHRyYXAodmVjdG9yPGludD4gJiBoZWlnaHQpewoJaWYoaGVpZ2h0LmVtcHR5KCkpCglyZXR1cm4gMDsKCQoJLy8gY3JlYXRlZCAyIHBvaW50ZXJzIDogJ2xlZnQnLCAncmlnaHQnCgkvLyBpbml0aWFsaXppbmcgdGhlIGxlZnQgYW5kIGxlZnQgc28gdGhhdCB3ZSBjYW4gdHJhY2sgbGVmdCBhbmQgcmlnaHQgcG9pbnRlcnMKCWludCBsZWZ0ID0gMCwgcmlnaHQgPSBoZWlnaHQuc2l6ZSgpIC0gMTsKCS8vYWxzbyBpbml0aWFsaXplZCBtYXhfbGVmdCwgbWF4X3JpZ2h0IGFuZCB0aGUgYW1vdXQgb2Ygd2F0ZXIgdHJhcHBlZCAKICAgIGludCBtYXhfbGVmdCA9IDAsIG1heF9yaWdodCA9IDA7CiAgICBpbnQgd2F0ZXJfdHJhcHBlZCA9IDA7CiAgICAKICAgIC8vbm93IHdoaWxlIGxvb3Agd2lsbCBydW4gdW50aWwgdGhlIGxlZnQgcG9pbnRlciBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHJpZ2h0IHBvaW50ZXIgCiAgICB3aGlsZSAobGVmdCA8PSByaWdodCkgewogICAgICAgIGlmIChoZWlnaHRbbGVmdF0gPD0gaGVpZ2h0W3JpZ2h0XSkgewogICAgICAgIAkvL2xlZnQgc2lkZSBoZWlnaHQgaXMgZ3JlYXRlciB0aGFuIG1heF9sZWZ0CiAgICAgICAgICAgIGlmIChoZWlnaHRbbGVmdF0gPiBtYXhfbGVmdCkKICAgICAgICAgICAgLy8gdXBkYXRlIGl0IHRvIHRoZSBjdXJyZW50IGhlaWdodCAKICAgICAgICAgICAgICAgIG1heF9sZWZ0ID0gaGVpZ2h0W2xlZnRdOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIC8vIHdlIGFyZSBjYWxjdWxhdGluZyB0aGUgd2F0ZXIgdHJhcHBlZCAKICAgICAgICAgICAgICAgIHdhdGVyX3RyYXBwZWQgKz0gbWF4X2xlZnQgLSBoZWlnaHRbbGVmdF07CiAgICAgICAgICAgIGxlZnQrKzsKICAgICAgICB9IGVsc2UgewogICAgICAgIAkvLyBzYW1lIHRoaW5nIGFzIHdlIGRpZCBhYm92ZSB3ZSBhcmUgYWdhaW4gZG9pbmcgaXQgaWYgd2UgYXJlIHByb2Nlc3NpbmcgZnJvbSB0aGUgcmlnaHQgaGFuZCBzaWRlIAogICAgICAgICAgICBpZiAoaGVpZ2h0W3JpZ2h0XSA+IG1heF9yaWdodCkKICAgICAgICAgICAgICAgIG1heF9yaWdodCA9IGhlaWdodFtyaWdodF07CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHdhdGVyX3RyYXBwZWQgKz0gbWF4X3JpZ2h0IC0gaGVpZ2h0W3JpZ2h0XTsKICAgICAgICAgICAgcmlnaHQtLTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gd2F0ZXJfdHJhcHBlZDsKfQoKaW50IG1haW4oKXsKICAgICAvLyBpbiB0aGUgbWFpbiBmdW5jIHdlIGFyZSBzaW1wbHkgcGFzc2luZyB0aGUgdmFsdWVzIAoJdmVjdG9yPGludD4gaGVpZ2h0ID0gezMsMSwyLDQsMCwyLDEsM307CgkvLyBhZnRlciBpbml0aWFsaXppbmcgd2UgcGFzc2VkIHRvIHRoZSB0cmFwIGZ1bmMgYW5kIHByaW50aW5nIHRoZSBvdXRwdXQgdXNpbmcgY291dCBmdW5jCiAgICBjb3V0IDw8IHRyYXAoaGVpZ2h0KSA8PCAiXG4iOwogICAgcmV0dXJuIDA7Cn0KICA=