@[我叫啥名字](/user/511271) 当 $tp1,tp2$ 为 $0$ 时会有 $x>y$ 的情况。
by Daidly @ 2022-12-16 21:51:45
@[我叫啥名字](/user/511271) 试试在 `solve()` 最前面加上 `if(x>y)return;`
by Daidly @ 2022-12-16 21:52:27
@[我叫啥名字](/user/511271) 用这方法时间复杂度会爆
加个特断就可以了
100分记录:https://www.luogu.com.cn/record/97448703
by jmh_AK_IOI @ 2022-12-16 22:00:51
@[Daidly](/user/271736) 不行啊,样例还是过不去
by ダ月 @ 2022-12-16 22:02:48
@[jiamh666](/user/774700) 请问加一个什么样的特判
by ダ月 @ 2022-12-16 22:04:40
@[我叫啥名字](/user/511271) 我觉得你的 query 那一点有点奇怪,为什么是直接询问 $x$ 和 $x+m$ 之间的区间和啊,为什么不是两个点之和啊?
另外:
- 这题用线段树很可能被卡一个点
- 统计答案时会爆 long long,可以中途退出或 `__int128`
by Daidly @ 2022-12-16 22:18:56
@[我叫啥名字](/user/511271)
当cnt1=0时,会出现s>t的情况要特判
solve(mid+1,r,s+cnt1,t);
当cnt2=t-s+1时,会出现s>t的情况要特判
solve(mid+1,r,s+cnt1,t);
for(int i=s;i<=t;++i){
int sum=0;
for(int j:S[p[i].id]){
sum+=query(j);
if(sum>=p[i].need)break;//特判不然会爆ll
}
if(sum>=p[i].need)p1[++cnt1]=p[i];
else p[i].need-=sum,p2[++cnt2]=p[i];
}
by jmh_AK_IOI @ 2022-12-16 22:23:26