Gửi bài giải
Điểm:
10,00
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
Input:
stdin
Output:
stdout
Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Kotlin, Pascal, PyPy, Python, Scratch
Dãy số ~a_1, a_2,..., a_n~ được gọi là tăng nếu ~a_1 < a_2 < … < a_n~.
Bạn được cho một dãy số ~b_1, b_2,..., b_n~ và một số nguyên dương ~d~. Trong mỗi lần thao tác, bạn chọn một phần tử của dãy số và cộng thêm ~d~ vào nó. Số thao tác ít nhất là bao nhiêu để biến đổi dãy số đã cho trở thành dãy số tăng.
Input
Dòng đầu tiên là số nguyên ~n~ và ~d~ ~(1 \le n \le 10^6, 1 \le d \le 10^9)~
Dòng tiếp theo là ~n~ số nguyên ~b_i~ ~(1 \le b_i \le 10^9 )~
Output
In ra một dòng duy nhất là số thao tác tối thiểu để biến đổi dãy số đã cho trở thành dãy số tăng.
Sample Input
4 2
1 3 3 2
Sample Output
3
Giải thích
dãy ~b=[1, 3, 3, 2]~ và ~d = 2~. Số thao tác ít nhất để biến đổi dãy số trở thành dãy số tăng là 3 và một trong các cách thực hiện như sau:
- Thao tác 1: cộng thêm ~d~ vào phần tử thứ ba, dãy trở thành ~[1,3, 5, 2]~
- Thao tác 2: cộng thêm ~d~ vào phần từ thứ tư, dãy trở thành ~[1,3, 5, 4]~
- Thao tác 3: cộng thêm ~d~ vào phần từ thứ tư, dãy trở thành ~[1,3, 5, 6]~ và là dãy số tăng.
Bình luận