[VTT Q4 Contest 15] Bài 4: Điền số [CELLFILL]

Xem dạng PDF

Gửi bài giải


Điểm: 4,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: CELLFILL.INP
Output: CELLFILL.OUT

Dạng bài
Ngôn ngữ cho phép
C++, Pascal, PyPy, Python

Có một băng giấy gồm ~n~ ô, đánh số từ 1 đến ~n~, ban đầu mọi ô đều ghi số 0. Ta được dùng lệnh ~Fill(i, j, v)~ với ~1 \le i \le j \le n~ và ~v \ge 0~ nguyên, hoạt động như sau:

  • Lệnh chỉ được thực hiện khi tại thời điểm đó, tất cả các ô từ ~i~ đến ~j~ đều đang ghi số nhỏ hơn ~v~.
  • Khi được thực hiện, số ~v~ được ghi đè lên mọi ô từ ~i~ đến ~j~.

Yêu cầu: tìm số lệnh ~Fill~ ít nhất cần dùng để cuối cùng ô ~i~ chứa đúng số ~a_i~ với mọi ~i~.

Dữ liệu

  • Dòng đầu chứa số nguyên dương ~T~ (~T \le 2 \times 10^5~), là số bộ test.
  • Tiếp theo là ~T~ nhóm, mỗi nhóm gồm 2 dòng:
    • Dòng thứ nhất chứa số nguyên dương ~n~ (~n \le 2 \times 10^5~).
    • Dòng thứ hai chứa ~n~ số nguyên không âm ~a_1, a_2, \dots, a_n~ (~0 \le a_i \le 10^9~).

Kết quả

In ra ~T~ dòng, dòng thứ ~i~ là số lệnh ~Fill~ tối thiểu cần dùng cho bộ test thứ ~i~.

Ví dụ

CELLFILL.INP

4
6
0 1 2 2 2 1
4
0 0 0 0
8
2 2 2 3 3 3 3 3
9
0 1 1 2 3 2 1 2 1

CELLFILL.OUT

2
0
2
4

Giải thích: Với bộ test thứ 4, có thể làm như sau (băng sau mỗi lệnh):

  • ~Fill(2, 9, 1)~: 0 1 1 1 1 1 1 1 1
  • ~Fill(4, 6, 2)~: 0 1 1 2 2 2 1 1 1
  • ~Fill(5, 5, 3)~: 0 1 1 2 3 2 1 1 1
  • ~Fill(8, 8, 2)~: 0 1 1 2 3 2 1 2 1

Giới hạn

  • Subtask 1 (30% số điểm): ~T \le 10~, ~n \le 100~.
  • Subtask 2 (30% số điểm): ~T \le 10~, ~n \le 1000~.
  • Subtask 3 (40% số điểm): không có ràng buộc thêm.

Bình luận

Hãy đọc nội quy trước khi bình luận.


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