回滚莫队
回滚莫队俗称不删除莫队,能够解决一些普通莫队所不能解决的问题
首先莫队对于多次询问某一段进行排序,需要支持每次在某一段左右两端添加一个点或删除一个点
但在很多时候我们发现添加或删除在某些时候其一难以完成
比如 维护一段区间内相距最远的同权的两点
显然用桶来维护的话增加是很好实现的,但删除则不然
代码如下
点击查看代码
for(int i=1,j=1;j<=(n-1)/len+1;++j){
int br=min(n,j*len),l=br+1,r=br,ans=0;
qweqweqwe=0;
for(;e[i].kuai==j;++i){
if(e[i].r-e[i].l<=len){
as[e[i].bian]=calc(e[i].l,e[i].r);
continue;
}
while(r<e[i].r){
r++;
add(r);
}
int nw=ans;
while(l>e[i].l){
l--;
add(l);
}
as[e[i].bian]=ans;
while(l<=br){
//某操作:表示将上述add()操作中所改变的量改回
l++;
}
ans=nw;
}
for(int i=1;i<=qweqweqwe;++i) st[clear[i]]=lst[clear[i]]=0;
}