uoj#P608. 【UR #20】机器蚤分组
【UR #20】机器蚤分组
在战前,蛐蛐国利用蛐口优势,发展了很多的劳动密集型产业。但经过了连年战乱后,蛐蛐国蛐口锐减,导致工业成本大大增加,国力低迷。为此,蛐蛐国必须推进产业升级,但缺乏相应的关键技术成为了一个症结。
伏特决定用跳蚤国的高新技术——机器蚤来解决这个难题。机器蚤是一种智能化机械,可以代替跳蚤和蛐蛐进行生产工作。但操作机器蚤是一个非常复杂的工作。具体来说,每只机器蚤都有独一无二的编号——一个非空小写字符串,如果一只机器蚤 $a$ 的编号 $s_a$ 是另一只机器蚤 $b$ 的编号 $s_b$ 的子串(连续子序列),那么 $b$ 就可以被 $a$ 控制。
一组机器蚤 $a_1,a_2,\ldots,a_k$ 是一个互不相同的机器蚤序列,使得对 $\forall 1\leq i < k$,$a_i$ 可以控制 $a_{i+1}$。对于一组这样的机器蚤,只需要一只蛐蛐操作 $a_1$,就可以同时控制里面所有机器蚤了。因此,给定若干机器蚤,将它们划分为最少数目的组就成为一个至关重要的问题。
现在伏特有一个机器蚤的命名串——一个非空小写字符串 $S$,伏特会询问你 $q$ 次,其中第 $i$ 次形如:考虑一个子串 $S[l_i,r_i]$ ,有一群机器蚤,它们的编号是这个子串的所有本质不同非空子串,那么最少能把它们划分成多少组?
输入格式
第一行两个正整数 $n,q$,分别表示 $S$ 的长度和询问次数。
接下来一行一个长度为 $n$ 的小写字符串 $S$。
接下来 $q$ 行,第 $i$ 行两个正整数 $l_i,r_i$,表示一个询问 $S[l_i,r_i]$ 。下标从 $1$ 开始。
输出格式
输出共 $q$ 行,第 $i$ 行一个正整数表示第 $i$ 次询问的答案。
4 1
abaa
1 4
3
询问 $S[1,4]=S$ ,因此所有机器蚤的编号是所有 $S$ 的非空子串,即 $a,b,aa,ab,ba,aba,baa,abaa$ 。
可以证明,最少能划分为 $3$ 个组,下面是其中一组合法方案(用编号指代机器蚤):
第 $1$ 组: $a,aa,abaa$
第 $2$ 组: $b,ab,aba$
第 $3$ 组: $ba,baa$
5 5
abbab
1 2
1 3
4 5
2 5
2 4
2
2
2
3
2
样例三
见附加文件中 ex_partition3.in
和 ex_partition3.out
。
样例四
见附加文件中 ex_partition4.in
和 ex_partition4.out
。
数据范围
对于所有数据, $1\leq n,q\leq 10^5,1\leq l_i\leq r_i \leq n$。
子任务编号 | $n,q\leq$ | 特殊性质 | 分值 |
---|---|---|---|
$1$ | $10$ | 无 | $9$ |
$2$ | $100$ | $18$ | |
$3$ | $1000$ | $21$ | |
$4$ | $25000$ | $17$ | |
$5$ | $10^5$ | 保证数据随机,其中字符串的每一位在字符集中等概率独立选取,每个询问在所有区间中等概率独立选取 | $15$ |
$6$ | 无 | $20$ |
时间限制:$4\texttt{s}$
空间限制:$512\texttt{MB}$