给定一个 0101 串 SS 代表 fan 神 cf 的 Only public activity,00 代表当天休息,11 代表当天有提交。
fan 神认为,连续的 00 或者连续的 11 是有特殊效果的。比如多摆几天水平下降的比间歇性摆下降的快。
现在 fan 神想知道,最早出现长度是 kk 的全 00 串或全 11 串的开头下标是多少 。即找到最小的 pp,满足 SpSp+1…Sp+k−1SpSp+1…Sp+k−1 都是 00 或 11,如果存在这样的 pp,fan 神会在这之后把 SpSp+1…Sp+k−1SpSp+1…Sp+k−1 这个串翻转(00 变 11,11 变 00)。如果不存在连续 kk 个要求的字符输出 −1−1 即可。
注意:会存在多次询问,并且翻转的操作会对之后的询问产生影响。
为了防止输入过大带来的常数问题,C++ 选手请尽量使用关闭流同步的 std::cin 和 std::cout 实现输入输出,否则可能出现因读入输出问题导致的 TLE 等。
int main(){ std::ios::sync_with_stdio(0); std::cin.tie(0); // your code return 0; }
第一行一个整数 TT (1≤T≤1000)(1≤T≤1000),表示测试数据组数。
对于每一组测试数据,第一行包含一个由 0101 构成的一个字符串 SS (1≤∣S∣≤5×105)(1≤∣S∣≤5×105)(下标从 11 开始)。
第二行包含一个整数 qq (1≤q≤5×105)(1≤q≤5×105) 代表询问次数。
接下来 qq 行,每行包含两个整数 op,kop,k (1≤k≤∣S∣,op=0,1)(1≤k≤∣S∣,op=0,1),代表寻找 kk 长度的全 opop 串。
保证所有测试数据的 ∣S∣∣S∣ 之和和 qq 之和均不超过 106106。
2
00110
5
0 1
1 2
1 3
0 4
0 1
101000000
2
0 3
1 4
1
3
-1
2
-1
4
3