POI 2018.10.27

[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)那么必然可以,否则必然不行。

权值线段树维护即可。

猜你喜欢

转载自www.cnblogs.com/Miracevin/p/9862081.html
poi