关于决策单调性二分队列写法
  • 板块学术版
  • 楼主_Hugoi_
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/12/27 13:32
  • 上次更新2023/12/27 19:16:18
查看原帖
关于决策单调性二分队列写法
525402
_Hugoi_楼主2023/12/27 13:32

决策单调性二分队列板子,但看不懂注释这行什么意思。

for(int i=1;i<=n;i++){
		if(hh<=tt&&q[hh].r<i) hh++;
		else q[hh].l=i;
		f[i]=f[q[hh].opt]+w(q[hh].opt+1,i);
		while(hh<=tt&&f[i]+w(i+1,q[tt].l)<=f[q[tt].opt]+w(q[tt].opt+1,q[tt].l)) tt--;
		int l=q[tt].l,r=q[tt].r;
		while(l<r){
			int mid=(l+r)>>1;
			if(f[i]+w(i+1,mid)<=f[q[tt].opt]+w(q[tt].opt+1,mid)) r=mid;
			else l=mid+1;
		}
		//if(f[q[tt].opt]+w(q[tt].opt+1,q[tt].r)<=f[i]+w(i+1,q[tt].r)) l++;
		if(l>q[tt].l) q[tt].r=l-1;
		else if(hh<=tt) tt--;
		if(l<=n) q[++tt]=(node){l,n,i};
	}
2023/12/27 13:32
加载中...