TLE-oj Cup Round 8 - Truy vấn tổng

Xem PDF

Nộp bài

Điểm: 2000 (thành phần)
Thời gian: 0.5s
Bộ nhớ: 128M
Input: QUERYSUM.inp
Output: QUERYSUM.out

Tác giả:
Dạng bài

Cho một dãy a gồm n phần tử. Bạn phải thực hiện q truy vấn, mỗi truy vấn yêu cầu bạn phải tìm số r lớn nhất sao cho r \le n(\Sigma^{i \le r}_{i = l}(a_i \times [u \le a_i \le v])) \le k. Trong đó:

  • \Sigma^{i \le r}_{i = l} c_i là tổng các giá trị c_i mọi trường hợp i từ l đến r.
  • [u \le a_i \le v] là hàm chân lý, trả về 1 (true) khi và chỉ khi u \le a_i \le v và trả về 0 (false) trong các trường hợp còn lại.

Hay nói cách khác, bạn cần tìm giá trị r lớn nhất sao cho đoạn mã giả sau trả về một giá trị s \le k (lưu ý: r có thể bằng l - 1):

gán s bằng 0

với mọi i từ l đến r:
    nếu u <= a_i <= v:
        tăng s lên a_i

trả về s

Input, Output và Subtasks

Input: (QUERYSUM.inp)
  • Dòng đầu tiên gồm hai số nguyên dương n, q. (n, q \le 100000)
  • Dòng thứ hai gồm các số nguyên a_1, a_2, ..., a_n. (1 \le a_i \le 10^9).
  • q dòng tiếp theo, mỗi dòng gồm 4 số nguyên dương l, u, v, k. (1 \le l \le n, 1 \le u \le v \le 10^9, 1 \le k \le 10^9)
Output: (QUERYSUM.out)
  • In ra kết quả của q truy vấn trên q dòng, mỗi dòng là một truy vấn.
Subtasks
  • Subtask 1 (15\%): u = 1, v = 10^9k bằng nhau qua mọi truy vấn.
  • Subtask 2 (15\%): n \le 1000.
  • Subtask 3 (15\%): a_i \le 500.
  • Subtask 4 (15\%): v - u \le 5.
  • Subtask 5 (20\%): u = 1.
  • Subtask 6 (20\%): Không có giới hạn gì thêm.

Sample

Input (QUERYSUM.inp)
7 3
4 6 8 2 10 5 1
4 1 5 7
1 2 3 5
1 1 10 15
Output (QUERYSUM.out)
6
7
2
Note
  • Truy vấn đầu tiên: Tìm được r tối đa bằng 6, trong đó có a_4 = 2, a_5 = 5 là số duy nhất thuộc đoạn [1, 5], do đó tổng giá trị là 7. Không thể có r = 7 vì lúc đó tổng giá trị sẽ là 8 do cũng có a_7 thuộc đoạn [1, 5].
  • Truy vấn thứ hai: Tìm được r = 7. Trong đó có số a_4 = 2 thuộc đoạn [2, 3], do đó tổng giá trị là 2 bé hơn k.

Bình luận

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