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 và (\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^9 và k 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