luogu#P4143. 采集矿石

采集矿石

题目背景

ZRQ 成功从坍塌的洞穴中逃了出来。终于,他看到了要研究的矿石。他想挑一些带回去完成任务。

题目来源:Zhang_RQ哦对了 ZRQ 就他,嗯

题目描述

ZRQ 发现这里有 NN 块排成一排的矿石。

他用一个小写字母来表示每块矿石,他还发现每块矿石有一个重要度 ViV_i

ZRQ 想采集一段连续的矿石回研究所。

他非常严格,被采集的一段矿石必须满足小写字母的字典序降序排名等于这段矿石的重要度和。

这里多个出现在不同位置的本质相同串的字典序排名相同。

比如说字母串为 aa,那么第一个 a 的排名和第二个 a 的排名相同,都是 2(第 1aa)。

ZRQ 问你,在原串中有哪些不同的子串可以被采集?

这里子串不同定义为出现位置不同,也就是说本质相同的子串出现在不同位置都要计算一次(当然重要度和等于排名是前提)。

比如共有 44 块矿石,小写字母串为 abcd,重要度各为 10 0 1 1

我们把所有的子串按照字典序从大到小排名:1:d 2:cd 3:c 4:bcd 5:bc 6:b 7:abcd 8:abc 9:ab 10:a

那么串 d 的排名为 11(第一大),重要度和为 11,可以被采集。

cd 的排名为 22,重要度和为 22,可以被采集。

a 的排名为 1010,重要度和为 1010,可以被采集。

其他串则不满足这个条件,故有三个串可以被采集。

输入格式

第一行一个长度为 NN 由小写字母组成的字符串,每个字符代表一个矿石。

第二行 NN 个整数,表示 ViV_i

输出格式

一行一个整数,表示能被采集的子串个数 SS

接下来 SS 行每行两个整数 L,RL,R,分别表示每个可采集子串的左端点与右端点,按照左端点升序为第一关键字,右端点升序为第二关键字排序。

abcd
10 0 1 1
3
1 1
3 4
4 4
aaaa
1 1 1 1
0
aaa
1 1 1
2
1 2
2 3
aaa
1 1 2
1
1 2

提示

1010 个测试点,每个点 1010 分,计 100100 分。

pcg6nP.png

对于所有测试点,有 N105N\leq 10^50Vi10000 \le V_i \le 1000。保证每个点可被采集的子串不超过 10510^5 个。

样例#1解释放在题面里了。

样例#2解释:

每个子串都不满足条件。

a 的排名是 44,重要度和都是 11

aa 的排名是 33,重要度和都是 22

aaa 的排名是 22,重要度和都是 33

aaaa 的排名是 11,重要度和都是 44

样例 #3解释:

a 的排名是 33,重要度和都是 11

aa 的排名是 22,重要度和都是 22,共有两个串aa,位置分别为 11~2222~33

aaa 的排名是 11,重要度和都是 33

样例 #4解释:

可以发现,串 22~33(第二个 aa)不满足条件了。它的排名还是 22 不变,但是重要度和为 33