Cho một mảng cố định. Mỗi truy vấn (l,r,k) hỏi số phần tử lớn hơn k trong đoạn chỉ số từ l đến r.
Input
Dòng đầu chứa n.
Dòng thứ hai chứa n số a1,…,an.
Dòng thứ ba chứa q.
Mỗi trong q dòng tiếp theo chứa l,r,k.
Output
Với mỗi truy vấn, in đáp án trên một dòng theo đúng thứ tự xuất hiện.
Constraints
1≤n≤3⋅104.
1≤ai≤109.
1≤q≤2⋅105.
1≤l≤r≤n.
1≤k≤109.
Scoring
Subtask 1 (50% số điểm): n≤100 và q≤100.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
6
4 1 7 4 9 2
4
1 6 4
2 5 3
3 3 7
4 6 1
Output
2
3
0
3
Giải thích: Bốn truy vấn lần lượt đếm được 2,3,0 và 3 phần tử. Ở truy vấn đầu, hai giá trị bằng 4 không được tính vì điều kiện là lớn hơn nghiêm ngặt.
Lời giải tóm tắt
Ý tưởng: Sắp các phần tử và truy vấn theo ngưỡng giảm dần; Fenwick đánh dấu vị trí có giá trị lớn hơn k.
Ý tưởng: 1. Tạo cặp (a_i,i), sắp giá trị giảm. 2. Sắp truy vấn theo k giảm, giữ id. 3. Với truy vấn hiện tại, kích hoạt mọi phần tử chưa dùng có a_i>k bằng Fenwick.add(i,1). 4. Đáp án là Fenwick.sum(r)-Fenwick.sum(l-1); phục hồi thứ tự id.
Tính đúng đắn: 1. Do cả hai danh sách giảm dần, trước mỗi truy vấn, tất cả và chỉ các phần tử có giá trị >k đã được kích hoạt. 2. Fenwick range sum đếm số vị trí kích hoạt trong [l,r], đúng bằng số a_i>k của truy vấn. 3. Mỗi truy vấn được xử lý với invariant đúng và được lưu theo id, nên toàn bộ đầu ra đúng.
Độ phức tạp: O((n+q) log n) thời gian, O(n+q) bộ nhớ.
Lưu ý cài đặt: Dùng >=k thay vì >k.
Lưu ý cài đặt: Sai thứ tự khi nhiều phần tử bằng k.