目的是找到一个但单调递减vector中,最大的小于 a[x] 的数,并求 pos 到 尾部元素的和(用另一个前缀和 vector 储存)
int le = dp[x] - 1;
int l = 0, r = rec[le].size() - 1;
if (r < 0) return 1;
reverse(rec[le].begin(), rec[le].end());
while (l < r) {
int mid = (l + r) / 2;
if (rec[le][mid] >= a[x]) r = mid;
else l = mid + 1;
}
r = rec[le].size() - 1 - r;
cout << "R:" << r << endl;
reverse(rec[le].begin(), rec[le].end());
return (sum[le].back() - (r ? sum[le][r - 1] : 0)) % mod;