class Solution {
public:
int minTaps(int n, vector<int>& ranges) {
vector<pair<int,int>> nap;
for(int i=0;i<ranges.size();i++){
nap.push_back(make_pair(max(0,i-ranges[i]),min(n,i+ranges[i])));
}
sort(nap.begin(),nap.end());
int R = 0;
int mxR = 0;
int ans = 1;
for(int i=0;i<nap.size();i++){
if(nap[i].first > R){
if(nap[i].first > mxR){ return -1; }
R = mxR;
ans++;
}
mxR = max(mxR,nap[i].second);
if(mxR == n) return ans;
}
return -1;
}
};