本蒟蒻在做本题的时候看到加法和乘法直接放弃思考,基本按照线段树模板 2 的思路来写线段树,然后因为乘完还要除回去,所以把数据用 double 来存,以乘 x1 来代替除以 x。
然后,我在线段树二分的时候,存左子树值的变量写成了 long long。。。好久才发现,还在那里想为什么会输出那么多一样的数。
ll queryIndex(ll root, ll k) {
if (tree[root].left == tree[root].right) return tree[root].left;
pushdown(root, tree[root].left, tree[root].right);
double lpart = tree[root << 1].sum;
if (lpart < k) return queryIndex(root << 1 | 1, k - lpart);
return queryIndex(root << 1, k);
}