以下の 22 つの配列を用意します。

  • A[i]A[i] : 重さが ii であるような木の実の個数
  • B[i]B[i] : 重さが ii であるような木の実の重さの合計

t=3t = 3 のクエリにおいて、明らかに重さが小さい木の実から順に取っていくことが最適です。

そうすると、BB の累積和について二分探索をすることによってクエリに対する答えを求めることができます。

具体的には、0ikB[i]<y\displaystyle \sum_{0 \leq i \leq k} B[i] < y となるような最大の kk を求めるとよいです。

累積和を愚直に計算すると、実行制限時間に間に合わないため、Binary Indexed Tree などのデータ構造を用いると十分高速です。

また、木の実の重さは 10910^9 までが入力で与えられるので、座標圧縮などを用いないといけないことに注意してください。

計算量は O(Qlog2Q)O(Q \log^2 Q) となります。