Bucket and Water Flow codechef solution in c++

#include<bits/stdc++.h>
using namespace std;

int main() {
    int t;
    cin >> t;

    while (t--) {
        int n, k;
        cin >> n >> k;

        vector<int> heights(n);
        for (int i = 0; i < n; i++) {
            cin >> heights[i];
        }

        vector<int> leftMax(n), rightMax(n);
        leftMax[0] = heights[0];
        rightMax[n - 1] = heights[n - 1];

        for (int i = 1; i < n; i++) {
            leftMax[i] = max(leftMax[i - 1], heights[i]);
        }

        for (int i = n - 2; i >= 0; i--) {
            rightMax[i] = max(rightMax[i + 1], heights[i]);
        }

        long long totalWater = 0;
        for (int i = 0; i < n; i++) {
            totalWater += max(0, min(leftMax[i], rightMax[i]) - heights[i]);
        }

        cout << totalWater << endl;
    }

    return 0;
}