看的 cmd 的题解,这个地方为什么要取 max 啊,不是单调的嘛。
我 assert 一下就 RE 穿了,删掉就 A 了,如果有做过本题的大佬求解释 qwq
局部代码:
for(int i=mid;i>=l;i--)
{
while(p1<r && in(s[p1+1],s[i])) p1++;
while(p2<r && !in(s[i],s[p2+1])) p2++;
p2=max(p2,p1);
ans+=2*(p1-mid)*s[i].r+2*(sr[r]-sr[p2])
+(p2-p1)*dep[s[i].x]+(sd[p2]-sd[p1])
+(p2-p1)*s[i].r+(sr[p2]-sr[p1]);
if(p1<p2)
{
if(p1>mid) q[++k]=node{-s[i].x,p1};
q[++k]=node{s[i].x,p2};
}
}