3
int maximumWhiteTiles(vector<vector<int>> &tiles, int carpetLen) {4
long long n = tiles.size(), ans = INT_MIN;5
sort(tiles.begin(), tiles.end());6
vector<long long> len(n), li(n);7
// len array stores the prefix sum of tiles8
// li array stores the last index tiles[i]9
for (int i = 0; i < n; i++) {10
len[i] = (long long)(tiles[i][1] - tiles[i][0] + 1);11
len[i] += (i == 0) ? 0 : len[i - 1];15
for (int i = 0; i < n; i++) {16
// sp means starting tile index17
// ep means ending tile index18
long long sp = tiles[i][0], ep = tiles[i][0] + (long long)carpetLen - 1, tc = 0;19
int idx = lower_bound(li.begin(), li.end(), ep) - li.begin();21
// logic to take count of tiles covered24
tc -= (i == 0) ? 0 : len[i - 1];26
tc = ep < tiles[idx][0] ? 0 : ep - (long long)tiles[idx][0] + 1;30
tc -= (i == 0) ? 0 : len[i - 1];