[POI2015]LOG
维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a。2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1,询问能否进行s次操作。每次询问独立,即每次询问不会对序列进行修改。
n<=1e6
修改数值不好掌握。我们离线读入询问,把所有的s,a离散化下来。
发现,对于一个Z c s,我们只要判断能不能操作。所以只关心大小关系。
大于等于s的数可以在s次中都参与贡献,小于s的数只能部分参与贡献。
设cnt为不小于s的数的出现次数,sum为小于s的数的出现次数。
可以操作的当且仅当:
sum>=s*(c-cnt)
意即,cnt个数每次都贡献之后,每次还剩(c-cnt)个要贡献,有s次。这些都要由小于s的数贡献。
所以如果sum>=s*(c-cnt),那么必然可以,否则必然不行。
权值线段树维护即可。