int segtwocut(int u,int num){ if(t[u].l==t[u].r)return t[u].l; int mid=(t[u].l+t[u].r)/2; int val=sum(t[u].l,mid,u*2); if(num<=val){ segtwocut(u*2,num); }else{ segtwocut(u*2+1,num-val); } }
意思为找出最小的 xxx 满足 num≤sum(1,x)num\le sum(1,x)num≤sum(1,x)