Phép thay thế

Đề bài

Mô tả

Cho một xâu s độ dài n gồm các chữ cái Latinh in thường và dấu chấm ..

Định nghĩa một thao tác rút gọn trên s như sau: tìm vị trí xuất hiện đầu tiên của xâu con .. (hai dấu chấm liên tiếp) trong s, rồi thay xâu con đó bằng một dấu chấm .. Nếu trong s không có hai dấu chấm liên tiếp thì không làm gì cả.

Gọi f(s) là số thao tác rút gọn ít nhất cần thực hiện để trong xâu thu được không còn hai dấu chấm liên tiếp nào.

Bạn cần xử lý m truy vấn. Truy vấn thứ i gán ký tự tại vị trí xi của s thành ký tự ci. Sau mỗi truy vấn hãy in ra giá trị f(s).

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nm — độ dài xâu và số truy vấn.
  • Dòng thứ hai chứa xâu s độ dài n gồm các chữ cái Latinh in thường và dấu ..
  • m dòng tiếp theo, mỗi dòng chứa một số nguyên xi và một ký tự ci (chữ cái in thường hoặc dấu .), mô tả truy vấn gán s[xi]:=ci.

Dữ liệu ra

In ra m dòng, dòng thứ i là giá trị của f(s) sau khi thực hiện truy vấn thứ i.

Ràng buộc

  • 1n,m3·105
  • 1xin

Ví dụ

Input Output Giải thích
10 3
.b..bz....
1 h
3 c
9 f
4
3
1
Sau truy vấn 1, s = hb..bz...., có hai cụm dấu chấm độ dài 2 và 4, f(s)=1+3=4.
Sau truy vấn 2, s = hbc.bz...., f(s)=0+3=3.
Sau truy vấn 3, s = hbc.bz..f., f(s)=1.
4 4
.cc.
2 .
3 .
2 a
1 a
1
3
1
1
Truy vấn 2 biến s thành ...., cần 3 thao tác để rút về một dấu chấm duy nhất.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0