算法随笔——线段树二分
int cur;
int query(int k,int l,int r,int x,int y,int S)
{
if (x <= l && r <= y)
{
if (cur + t[x].val <= S)
{
cur += t[x].val;return -1;
}
if (l == r)
{
return l;
}
}
int mid = l +r >> 1;
if (x <= mid)
{
int res = query(k<<1,l,mid,x,y,S);
if (res != -1) return res;
}
// int mid = l +r >> 1;
if (y >= mid + 1)
{
int res = query(k<<1 | 1,mid + 1,r,x,y,S);
if (res != -1) return res;
}
return -1;
}

浙公网安备 33010602011771号