1. 程式人生 > 實用技巧 >【CF 1469 C】 Building a Fence

【CF 1469 C】 Building a Fence

題意

思考過程

通過觀察條件,可以發現每次的選擇範圍由前一個和當前條件的限制。所以按順序推進計算範圍即可。

/**********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;
}