canuc80k0214·15/50

Đếm Cặp AC Trên Đoạn

Nộp bài trên LQDOJ

Bài 02 · Prefix Sum

Cho một chuỗi gồm các ký tự . Bạn cần trả lời nhiều truy vấn trên các đoạn con của chuỗi.

Với truy vấn , hãy đếm số chỉ số thỏa mãn đồng thời:

  • ;
  • và .

Nói cách khác, một lần xuất hiện của chuỗi hai ký tự AC chỉ được tính khi cả hai ký tự của nó đều nằm hoàn toàn trong đoạn từ đến .

Input

  • Dòng đầu chứa hai số nguyên và .
  • Dòng thứ hai chứa chuỗi có độ dài .
  • Mỗi trong dòng tiếp theo chứa hai số nguyên và .

Output

  • Với mỗi truy vấn, in số lần xuất hiện của AC trong đoạn tương ứng trên một dòng.

Constraints

  • .
  • .
  • và mỗi ký tự thuộc tập {A, C, G, T}.
  • .

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

10 5
AACACGACCT
1 10
2 5
3 7
5 8
8 10

Output

3
2
1
1
0

Giải thích: Trong toàn chuỗi, AC bắt đầu tại các vị trí , nên truy vấn đầu có đáp án . Đoạn từ đến chứa hai lần xuất hiện bắt đầu tại và ; đoạn từ đến không chứa cặp nào.

Lời giải tóm tắt
  • Ý tưởng: Gắn mỗi lần xuất hiện AC với đầu mút phải của nó. Đặt P_i là số cặp AC có đầu mút phải không vượt quá i. Trong truy vấn [l,r], đầu mút phải hợp lệ nằm từ l+1 đến r, nên đáp án là P_r-P_l.
  • Chứng minh tính đúng: Mỗi cặp AC có đúng một đầu mút phải. Hiệu P_r-P_l giữ chính xác các cặp có đầu mút phải thuộc [l+1,r]; khi đó đầu mút trái thuộc [l,r-1], nên cả hai ký tự nằm trong đoạn. Mọi cặp nằm hoàn toàn trong đoạn đều có đầu mút phải trong khoảng này và được đếm đúng một lần.
  • Độ phức tạp: Tiền xử lý O(n), mỗi truy vấn O(1), bộ nhớ O(n).