#L3654. 「2021 集训队互测」中奖率

「2021 集训队互测」中奖率

题目描述

小 T 在玩一款游戏,游戏中有彩票。彩票只有中奖与不中奖两种情况。

小 T 玩了一段时间后发现,如果将中奖看作 11,不中奖看作 00 的话,那么一直买彩票后生成的无限长的 0101 序列 TT 有一个长为 nn 的循环节 SS。具体来讲,TT 满足 Ti=S((i1)modn)+1T_i = S_{((i-1) \bmod n) + 1}

定义 fif_i 为只考虑前 ii 次买彩票时的中奖率,更具体地,若前 ii 个数中有 cic_i11,那么

fi=ciif_i = \frac{c_i}{i}

小 T 想知道中奖率何时比较高,于是他会有 qq 次询问,具体形式如下:

  • 给定整数 kk,设 fwf_w 为序列 ff 中第 kk 大的值,求 ww
  • 给定整数 kk,求出 fkf_k 的排名,若排名不存在,输出 inf

注意:我们称 faf_afbf_b 大当且仅当 fa>fbf_a > f_bfa=fba<bf_a = f_b \wedge a < b。可以证明在这样的定义下,序列 ff 中第 kk 大的值是存在且唯一的。

输入格式

第一行两个整数 n,qn, q,表示循环节长度与询问次数。

第二行一个 0101 序列 SS,表示循环节。

接下来 qq 行,每行两个整数 op,kop, k,分别表示询问类型和询问参数。op=1op = 1 表示第一种询问,即查询第 kk 大所在位置,op=2op = 2 表示第二种询问,即查询排名。

输出格式

qq 行,每行一个整数表示答案。

样例 1

输入

3 6
100
1 1
2 3
1 2
1 3
2 7
2 8

输出

1
inf
2
4
4
8

0101 序列 TT100100100100100100100100100100100100\dots

序列 ff 的前 1313 项为

$$\frac{1}{1}, \frac{1}{2}, \frac{1}{3}, \frac{1}{2}, \frac{2}{5}, \frac{1}{3}, \frac{3}{7}, \frac{3}{8}, \frac{1}{3}, \frac{2}{5}, \frac{4}{11}, \frac{1}{3}, \frac{5}{13} $$

可以发现后面的项不会对这几个询问的答案产生影响。

样例 2

输入

10 7
1011001000
1 41
1 33
1 4348
1 1235467890
2 19260817
2 729384264
2 274892563

输出

12
19
4968
1058972476
11235477
364692134
240530993

数据范围与提示

对于所有测试数据,$1 \leq n \leq 2 \times 10^5, 1 \leq k \leq 10^{10000}, 1 \leq q \leq 20, op \in \{1, 2\}$,保证 SS0101 序列。

子任务编号 nn \leq kk \leq 特殊性质 分值
1 10510^5 101000010^{10000} S1=S2==Sn1=0,Sn=1S_1 = S_2 = \dots = S_{n-1} = 0, S_n = 1 1
2 1010 10001000 9
3 10510^5 10910^9
4 101000010^{10000} op=2op = 2 13
5 S1=1,S2=S3==Sn=0S_1 = 1, S_2 = S_3 = \dots = S_n = 0 20
6 200200 18
7 10510^5 30