回滚莫队

回滚莫队俗称不删除莫队,能够解决一些普通莫队所不能解决的问题
首先莫队对于多次询问某一段进行排序,需要支持每次在某一段左右两端添加一个点或删除一个点
但在很多时候我们发现添加或删除在某些时候其一难以完成
比如 维护一段区间内相距最远的同权的两点
显然用桶来维护的话增加是很好实现的,但删除则不然
代码如下

点击查看代码
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;
	}
posted @ 2022-05-31 18:32  蒟蒻jht  阅读(58)  评论(0)    收藏  举报