$map$ .
用 $sum(i,0/1/2)$ 分别表示三种字母出现次数的前缀和.
一段区间 $[L+1,R]$ 合法的充要条件是 $sum(r,0)-sum(l,0)=sum(r,1)-sum(l,1),sum(r,1)-sum(l,1)=sum(r,2)-sum(l,2)$ .
将两种差看成两个权值,加入每个元素后询问两个权值都与它相等的元素出现的第一个位置,可以用 $map$ 维护.
1 |
|
夢はここに 思い出は遠くに
$map$ .
用 $sum(i,0/1/2)$ 分别表示三种字母出现次数的前缀和.
一段区间 $[L+1,R]$ 合法的充要条件是 $sum(r,0)-sum(l,0)=sum(r,1)-sum(l,1),sum(r,1)-sum(l,1)=sum(r,2)-sum(l,2)$ .
将两种差看成两个权值,加入每个元素后询问两个权值都与它相等的元素出现的第一个位置,可以用 $map$ 维护.
1 | #include<bits/stdc++.h> |