题意
思考过程
通过观察条件,可以发现每次的选择范围由前一个和当前条件的限制。所以按顺序推进计算范围即可。
/**********showtime************/
const int maxn = 2e5+9;
int a[maxn];
int high[maxn],low[maxn];
int main(){
int T; scanf("%d", &T);
while(T--){
int n,k;
scanf("%d%d", &n, &k);
for(int i=1; i<=n; i++) scanf("%d", &a[i]);
high[1] = a[1] + k;
low[1] = a[1] + 1;
int flag = 1;
for(int i=2; i<=n; i++){
high[i] = high[i-1] + k - 1;
low[i] = low[i-1] - k + 1;
low[i] = max(low[i], a[i] + 1);
high[i] = min(high[i], a[i] + k + k - 1);
if(low[i] > high[i] - k + 1) {
flag = 0;
break;
}
}
if(a[n] + 1 >= low[n] && a[n] + 1 <= high[n]){
}
else flag = 0;
if(flag) puts("YES");
else puts("NO");
}
return 0;
}