#L3678. 「北大集训 2021」扑克比大小

    ID: 5558 传统题 9000ms 512MiB 尝试: 20 已通过: 1 难度: 10 上传者: 标签>字符串KMP后缀数据结构最小表示法哈希和哈希表数据结构

「北大集训 2021」扑克比大小

题目描述

小 Z 和小 A 在玩扑克比大小。

规则如下:

  • 系统给双方各发一堆手牌(数量可能不同),每张牌有一个小写字母
  • 每轮同时翻开牌堆顶的第一张牌:
    • 若牌不同,字母更小的一方获胜
    • 若牌相同,将翻开的牌塞入牌堆底,继续游戏直到某方获胜

系统从牌库发牌:假设牌库有 nn 张牌 a1,a2,,ana_1,a_2,\cdots,a_n,系统选择第 ll 张到第 rr 张牌发给玩家(牌堆顶到牌堆底为 al,al+1,,ara_l,a_{l+1},\cdots,a_r

现在进行 qq 轮游戏,小 Z 知道小 A 在第 ii 轮的牌为 ali,ali+1,,aria_{l_i},a_{l_i+1},\cdots,a_{r_i},求小 Z 有多少种可能的手牌能赢小 A。

两堆手牌视为不同当且仅当:

  1. 手牌数量不同,或
  2. 存在位置 dd 使得距离堆顶为 dd 的牌不同

输入格式

第一行:一个只包含小写字母的字符串 aa

第二行:正整数 qq 和整数 typetype(数据类型)

接下来 qq 行:每行两个整数 lil_irir_i

输出格式

输出 qq 行,每行一个整数表示小 Z 可能赢的手牌种数

样例 1

输入

abbab
5 0
1 3
2 4
3 5
1 4
2 5

输出

4
7
6
2
8

样例 2

见附加文件中的

样例 3

见附加文件中的

数据范围与提示

对于所有数据:1liria5×1051 \leq l_i \leq r_i \leq |a| \leq 5 \times 10^51q5×1051 \leq q \leq 5 \times 10^5

子任务 得分 nn \leq qq \leq typetype
1 3 10210^2 0
2 500 2000
3 4 2,000
4 5 2×1042 \times 10^4 2000
5 13 10510^5 3
6 17 0
7 15 5×1055 \times 10^5 1
8 2
9 25 0

数据类型 typetype 含义

  • type=0type=0:数据无特殊限制
  • type=1type=1:保证 1lra\exists 1\le l'\le r'\le |a|ali,ri+ali,ri=al,ra_{l_i,r_i}+a_{l_i,r_i}=a_{l',r'}
  • type=2type=2:保证 rl=rili+1\forall r'-l'=r_i-l_i+1,若 al,r1=ali,ria_{l',r'-1}=a_{l_i,r_i},则必有 aralia_{r'}\neq a_{l_i}
  • type=3type=3:保证 rili105\sum r_i-l_i \le 10^5

其中 al,ra_{l,r} 表示字符串 alal+1ara_la_{l+1}\cdots a_ra+ba+b 表示字符串 aabb 按顺序拼接。