请问这道题
查看原帖
请问这道题
142549
hbhz_zcy楼主2022/3/19 11:17

看题解看了很久才看懂一点,发现第3篇题解中有:

for(int i=1,l=1,r=0;i<=m;i++)
		if(l>q[i].l) v[r].emplace_back(q[i].l,l-1,q[i].id,1),ans[q[i].id]-=p[l-1]-p[q[i].l-1],l=q[i].l;
		if(r<q[i].r) v[l-1].emplace_back(r+1,q[i].r,q[i].id,-1),ans[q[i].id]+=p[q[i].r]-p[r],r=q[i].r;
		if(l<q[i].l) v[r].emplace_back(l,q[i].l-1,q[i].id,-1),ans[q[i].id]+=p[q[i].l-1]-p[l-1],l=q[i].l;
		if(r>q[i].r) v[l-1].emplace_back(q[i].r+1,r,q[i].id,1),ans[q[i].id]-=p[r]-p[q[i].r],r=q[i].r;
	}

虽然说是对莫队的优化,但总结起来所有的有关ans的都能写成:
ans[q[i].id]+=p[q[i].l-1]+p[q[i].r]-p[l-1]-p[r];
并且所有的l、r都能用q[i-1].l、q[i-1].r代替

感觉这样就和莫队相差甚远了。

2022/3/19 11:17
加载中...