社区讨论
求教 wqs 二分 check 内判断的差别
P6246[IOI 2000] 邮局 加强版 加强版参与者 4已保存回复 25
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 25 条
- 当前快照
- 1 份
- 快照标识符
- @mdqry5es
- 此快照首次捕获于
- 2025/07/31 10:27 7 个月前
- 此快照最后确认于
- 2025/11/05 00:55 4 个月前
如果我二分内判断
CPPg[n] <= p,二分外 l = mid + 1,ret = mid,那么就过了。il bool check__(int val) {
hh = 1; tt = 0; f[0] = g[0] = 0;
rep(i,1,n) {
// cerr << hh << " " << tt << endl;
while (hh <= tt && check(q[hh - 1],q[hh]) <= i) ++ hh;
int j = q[hh - 1];
f[i] = f[j] + calc(j + 1,i) - val; g[i] = g[j] + 1;
while (hh <= tt && check(q[tt - 1],q[tt]) >= check(q[tt],i)) -- tt;
q[++ tt] = i;
}
return g[n] <= p;
}
il void solve() {
//------------code------------
read(n,p);
rep(i,1,n) read(a[i]);
sort(a + 1,a + n + 1);
rep(i,1,n) s[i] = s[i - 1] + a[i];
int l = -1e7,r = 0,ret = 0;
while (l <= r) {
int mid = l + r >> 1;
if (check__(mid)) l = mid + 1,ret = mid;
else r = mid - 1;
}
check__(ret);
write(f[n] + p * ret,'\n');
return ;
}
但是如果我反过来,二分里判断
g[n] >= p,二分外移动 r = mid - 1,ret = mid,那么就会 wa 20pts.不理解为什么。求教。
回复
共 25 条回复,欢迎继续交流。
正在加载回复...