trang chủ / bài tập / distchar

Truy vấn ký tự phân biệt

Đề bài

Mô tả

Cho một xâu s gồm các chữ cái Latin thường và q truy vấn trên xâu này.

Xâu con s[l..r] là xâu slsl+1sr.

Có hai loại truy vấn:

  • 1 pos c — thay ký tự tại vị trí pos bằng ký tự c (gán spos:=c), với c là một chữ cái Latin thường.
  • 2 l r — đếm số ký tự phân biệt trong xâu con s[l..r].

Dữ liệu vào

  • Dòng đầu chứa xâu s gồm các chữ cái Latin thường.
  • Dòng thứ hai chứa số nguyên q — số truy vấn.
  • q dòng tiếp theo, mỗi dòng chứa một truy vấn theo một trong hai định dạng nêu trên.

Dữ liệu ra

Với mỗi truy vấn loại 2, in ra trên một dòng số lượng ký tự phân biệt trong xâu con tương ứng.

Ràng buộc

  • 1|s|105
  • 1q105
  • Với truy vấn loại 1: 1pos|s|.
  • Với truy vấn loại 2: 1lr|s|.
  • Có ít nhất một truy vấn loại 2.

Ví dụ

Input Output Giải thích
abacaba
5
2 1 4
1 4 b
1 5 b
2 4 6
2 1 7
3
1
2
Xâu con s[1..4] = "abac" có 3 ký tự phân biệt {a, b, c}. Sau hai phép gán, xâu thành "abababa". s[4..6] = "bab" có 1 ký tự phân biệt. s[1..7] = "abababa" có 2 ký tự phân biệt.
dfcbbcfeeedbaea
15
1 6 e
1 4 b
2 6 14
1 7 b
1 12 c
2 6 8
2 1 6
1 7 c
1 2 f
1 10 a
2 7 9
1 10 a
1 14 b
1 1 f
2 1 11
5
2
5
2
6
Các truy vấn loại 2 được trả lời lần lượt sau khi áp dụng các phép cập nhật trước đó.

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 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