传送门:
[1]:BZOJ
[2]:洛谷
定义数组 a,b,c 分别表示 'J' , 'O' , 'I' 的前缀和;
要想使区间 (L,R] 满足条件当且仅当 a[R]-a[L] = b[R]-b[L] = c[R]-c[L];
提前预处理出 a,b,c 数组后;
对于 i 位置,查找之前是否含有满足 ai-bi = aj-bj && bi-ci = bj-cj 的位置 j,并且 j 尽可能的小;
如何高效的查找呢?
使用 map<pair<int ,int > , int >;
对于之前处理过的位置 j ,将 aj-bj 和 bj-cj 存入到 pair<int ,int > 中,每次查找是否存在 (ai-bi,bi-ci) 即可;
如果存在,求解当前答案,反之,将其加入到map中;