Tăng theo modulo

Đề bài

Mô tả

Cho một dãy N số nguyên A1,A2,…,AN, mỗi số nằm trong đoạn từ 0 đến M−1.

Trong một thao tác, bạn được chọn một tập chỉ số bất kỳ (có thể rỗng) i1<i2<…<ik, rồi thay đồng thời mỗi Aij thành (Aij+1)modM. Giá trị M là cố định cho mọi thao tác.

Nói cách khác, mỗi thao tác cho phép tăng thêm 1 theo modulo M cho bao nhiêu phần tử tuỳ ý, kể cả tất cả.

Hãy tìm số thao tác ít nhất cần dùng để dãy trở thành không giảm, tức là A1≤A2≤…≤AN. Nếu dãy đã không giảm sẵn thì đáp án là 0. Luôn tồn tại cách làm với đủ số thao tác.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên N và M.
  • Dòng thứ hai chứa N số nguyên A1,A2,…,AN.

Dữ liệu ra

Một dòng chứa một số nguyên: số thao tác ít nhất cần thực hiện.

Ràng buộc

  • 1≤N,M≤300000
  • 0≤Ai<M

Ví dụ

Input Output Giải thích
5 3
0 0 0 1 2
0 Dãy [0,0,0,1,2] đã không giảm nên không cần thao tác nào.
5 7
0 6 1 3 2
1 Dùng một thao tác với tập chỉ số {2,5}: A2=(6+1)mod7=0 và A5=(2+1)mod7=3. Dãy trở thành [0,0,1,3,3], đã không giảm. Không thể làm với 0 thao tác vì dãy ban đầu có A2>A3.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0