Giao lưu THT 2024 lần 3 - Bài D bảng C1

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2200 Thời gian: 1.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Cho dãy \(a_1, a_2, ..., a_n\). Bạn cần thực hiện hai loại truy vấn sau:

  • \(!\ u\ v\): Gán \(a_u = v\) \((1 \le u \le n, 1 \le v \le 10^9)\).
  • \(?\ l\ r\): Giả sử mỗi thao tác bạn có thể chọn một phần tử bất kỳ và tăng giá trị của nó lên \(1\). Tính số lượng thao tác tối thiểu để dãy \(a_l, a_{l + 1}, ..., a_r\) là dãy không giảm.

Input

  • Dòng đầu tiên gồm hai số nguyên dương \(n, q\) - số phần tử của dãy và số truy vấn cần xử lý (\(1 \le n, q \le 10^5\)).
  • Dòng tiếp theo gồm \(n\) số nguyên dương \(a_1, a_2, ..., a_n\) (\(1 \le a_i \le 10^9\)).
  • \(q\) dòng tiếp theo, mỗi dòng là một truy vấn thuộc một trong hai dạng trên.

Output

  • Với mỗi truy vấn loại 2, in ra kết quả trên một dòng.

Example

Test 1

Input
4 3
2 4 1 4
? 2 4
! 1 4
? 1 4
Output
3
3
Note
  • \(n = 4\), \(q = 3\)
  • \(a = (2, 4, 1, 4)\)
  • Truy vấn ? 2 4: Cần 3 thao tác để biến dãy \(a_2, a_3, a_4\) thành \((4, 4, 4)\)
  • Truy vấn ! 1 4: \(a = (4, 4, 1, 4)\)
  • Truy vấn ? 1 4: Cần 3 thao tác để biến dãy \(a\) thành \((4, 4, 4, 4)\)

Scoring

  • \(20\%\) số điểm có \(n, q \le 2000\).
  • \(30\%\) số điểm khác không có truy vấn loại 1.
  • \(30\%\) số điểm khác có \(l = 1, r = n\) với mọi truy vấn loại 2.
  • \(20\%\) số điểm còn lại không có giới hạn gì thêm.

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.