看题解看了很久才看懂一点,发现第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代替
感觉这样就和莫队相差甚远了。