【CF 1469 C】 Building a Fence
阿新 • • 發佈:2020-12-30
題意
思考過程
通過觀察條件,可以發現每次的選擇範圍由前一個和當前條件的限制。所以按順序推進計算範圍即可。
/**********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; }