对二分部分有点疑惑,解答必关
查看原帖
对二分部分有点疑惑,解答必关
752711
hateful_bug楼主2024/12/8 21:49

二分的代码我先排除队尾完全不优的(左端点i更优直接出队),再在i介于左右端点的那个区间里二分,当二分边界L,R为左端点,右端点时爆零,当右侧改为n时AC,右端点往右的不应该是必定不优吗?(前面都出队了)为什么二分有边界从最后一个区间右端点二分不对?

    h=t=0;
		q[0]={1,n,0};
		for(int i=1;i<=n;i++)
		{
			while(h<=t&&q[h].r<i)
			++h;
			f[i]=calc(i,q[h].shu);
			ans[i]=q[h].shu;
			while(h<=t&&calc(q[t].l,i)<calc(q[t].l,q[t].shu))
			--t;
			if(calc(n,i)<calc(n,q[t].shu))
			{
				int z=q[t].l,y=n;
				while(z<y)
				{
					int mid=(z+y+1)>>1;
					if(calc(mid,i)<calc(mid,q[t].shu))
					y=mid-1;
					else
					z=mid;
				}
				q[t].r=z;
				q[++t]={z+1,n,i};
			}
		}
2024/12/8 21:49
加载中...