1. 模拟 给一个01串,可以进行两种操作00->11,10->01要求最后所有的0在1前面,求最小操作次数思路:遍历数组,找最前面的1下标,记为ln->l反序遍历,遇到01变成10,操作次数加1,遇到00变成11,操作一次加一,其他不变遍历完即可2. 异或前缀和给一个数组a1~an,和查询l,r,求al-ar区域的k进制异或和tk,求max(tk)-min(tk),k取值2-10思路:维护S(j,k)表示0-j的k进制异或和,则tk = sub(S(r,k)-S(l-1,k),k),sub表示不进位减法遍历k即可3. 二分给定由CM组成的字符串s{1~n},记s{1~l-1}以及s{r+1~n}的c的个数,和s{l~r}的m的个数的最大值为t(l,r)求 max{t(l,r)}思路:维护前缀和 c{0~n}和m{0~n}表示前n个字符里c和m的个数则 t(l,r) = max{c(n)-c(r)+c(l-1),m(r)-m(l-1)}注意到, 固定l, c(n)-c(r)+c(l-1)-m(r)+m(l-1)是单调的,也就是r变动一下,要么c的个数变多,要么m的个数变少利用二分求c(n)-c(r)+c(l-1)-m(r)+m(l-1)=0的r代入即为最小的t(l,r)遍历l,二分找r,求t(l,r)的最大值即可