传送门
题意简述:咕咕咕
思路:考虑预处理出 b b b数组,然后每次改动 a a a都只会对第 i i i和 i + 1 i+1 i+1这两个位置产生影响,于是可以用线段树来维护 b b b数组。
现在求答案的方法是断环为链,倍增整个数组,然后就可用线段树维护 0 0 0段的一些信息。
代码:
#include<bits/stdc++.h>
#define ri register int
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=((ans<<2)+ans<<1)+(ch^48),ch=getchar();
return ans;
}
const int N=4e5+5;
int n,m,a[N];
char s[N][2];
namespace sgt{
#define lc (p<<1)
#define rc (p<<1|1)
#define mid (T[p].l+T[p].r>>1)
struct Node{
int l,r,ls,rs,lp,rp,val;
inline void Set(int k){
int tmp=k;
k=(k-1)%n+1;
int v1=a[k],v2=k==1?a[n]:a[k