canuc80k2403·4/50

Bao Nhiêu Số Bé Hơn

Nộp bài trên LQDOJ

Bài 24 · Sqrt Decomposition

Cho một dãy gồm số nguyên và đúng thao tác. Ngoài phép cộng đoạn, bạn cần đếm trên một đoạn có bao nhiêu giá trị hiện tại nhỏ hơn . Dấu so sánh là nghiêm ngặt: giá trị bằng đúng không được đếm.

Các thao tác có ý nghĩa như sau:

  • : cộng vào mọi với .
  • : in số chỉ số thỏa .

Input

  • Dòng đầu chứa số nguyên . Dòng thứ hai chứa số nguyên . Tiếp theo là đúng dòng, mỗi dòng chứa bốn số nguyên .

Output

  • Với mỗi thao tác , in số vị trí thỏa điều kiện nghiêm ngặt .

Constraints

  • .
  • .
  • Mọi phần tử ban đầu và nằm trong miền số nguyên bit có dấu.
  • Giá trị và mọi giá trị hiện tại được xử lý bằng số nguyên bit có dấu.
  • Mỗi đáp án nằm trong .

Scoring

  • Subtask ( điểm): .
  • Subtask ( điểm): không có ràng buộc bổ sung.

Example

Test 1

Input

5
1 4 2 8 3
1 1 5 2
0 2 4 -2
1 1 4 1
1 2 5 3
1 3 3 0

Output

3
1
4
0

Giải thích: Với , các giá trị nhỏ hơn là . Sau khi trừ trên , lần lượt có phần tử nhỏ hơn , có phần tử nhỏ hơn trên , và không có giá trị nào nhỏ hơn ở vị trí .

Lời giải tóm tắt
  • Ý tưởng: Mỗi khối lưu các giá trị thô theo thứ tự tăng dần cùng một nhãn cộng chung. Khi sửa mảnh khối, cập nhật trực tiếp rồi sắp xếp lại đúng khối đó. Với khối nguyên, dùng lower_bound cho ngưỡng .
  • Chứng minh đúng: Dãy đã sắp xếp của mỗi khối luôn chứa đúng các giá trị thô trong khối, còn nhãn chứa phần cộng chung. Vì vậy lower_bound đếm đúng số giá trị thật nhỏ hơn ngưỡng trên khối nguyên; mảnh biên được kiểm trực tiếp. Các phần không chồng lấn nên tổng đếm đúng.
  • Độ phức tạp: cho mỗi thao tác theo cận đơn giản; bộ nhớ .