算法随笔——线段树二分


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;
}
posted @ 2026-08-10 20:31  codwarm  阅读(3)  评论(0)    收藏  举报