小店购物

小店购物

题目描述

小 K 继续着他的旅行,然后他走进了一家小店。这家小店有 nn 个商品,小K 在这个小店转了一圈,于是他给每个商品确定了一个价值 w_iwi,每个商品也有一个价格 p_ipi 元。

小K 购物的方式有些特别,他购物会分若干轮,每轮他会选择从他当前有能力支付的商品中选择价值最高的商品购买一件(如果有相同,则优先选择价格低的商品购买),所以每轮他都会购买一件商品(每个商品个数是无穷多的),直到他不能买任何商品。

现在小K 想知道,假设他有 kk 元钱,那么他会买下价值总和为多少的商品。而随着环境、经济政策、市场需求、店主和小 K 的心情变化,小 K 对每个商品所定的价值和店主对每个商品所定的价格也在改变,而小 K 会时不时向你询问,请你依次为他解答。

输入格式

第一行两个正整数 n,mnm,表示商品个数,以及修改和询问个数。

接下来 nn 行,每行两个正整数 w_i,p_iwipi,表示第 ii 件商品的价值和价格。

接下来 mm 行,每行为一个操作或询问,格式如下:

  • 1 x w p,表示将第 xx 件商品的价值改为 ww,价格改为 pp;

  • 2 2 k, 表示询问 kk 元钱所买下的商品价值总和。

输出格式

共若干行,每行依次对应一个询问

样例

样例输入1

3 3
1 1
2 2
3 3
2 10
1 1 6 6
2 10

样例输出1

10
9

数据范围与提示

测试点编号 约束条件
1-2 n,m,k \le 2000n,m,k2000
3-4 不存在修改操作
5-10 n,m \le 100000n,m100000

对于100%的数据,$ 1 \le n,m \le 100000,1 \le w_i,p_i,w,p,k \le 10^9,1 \le x \le n1n,m1000001wi,pi,w,p,k10^91xn $

来源

CSP2019常州集训11-1


Solution

可以发现一次购买k减少一半以上。

那么我们考虑暴力模拟买的过程,需要支持:查找p<=k的物品中w最大的,加入,删除物品。

考虑把w离散建线段树,每个叶节点开个mutiset存p.

线段树上就维护p的区间最小值,每次查找线段树上二分即可。

注意:1.离散化完线段树建树,查询,修改都是1~tot

           2.mutiset直接删除值的话是全部删除,如果只删一个需要iterator

猜你喜欢

转载自www.cnblogs.com/liankewei/p/11846520.html