P5324 [BJOI2019]删数 (线段树 求区间 0 的个数)

题目描述

对于任意一个数列,如果能在有限次进行下列删数操作后将其删为空数列,则称这个数列可以删空。一次删数操作定义如下:

记当前数列长度为kk,则删掉数列中所有等于kk的数。

现有一个长度为nn的数列aa,有mm次修改操作,第ii次修改后你要回答:
经过ii次修改后的数列aa,至少还需要修改几个数才可删空?

每次修改操作为单点修改或数列整体加一或数列整体减一。

输入输出格式

输入格式:

 

第一行两个正整数n,mn,m,分别表示数列长度、修改次数。
第二行有nn个正整数,表示数列aa,即输入的第ii个数表示数列aa的第ii个数a_iai​。

接下来mm行,每行两个整数p,xp,x,表示一次修改操作。
当1\le p \le n1≤p≤n时,该操作为单点修改,将数列中第pp个数a_pap​修改为xx
当p=0p=0时,该操作为数列整体加xx。

 

输出格式:

 

输出mm行,每行一个整数,第ii行表示前ii次修改后的答案。

思路:

简单想一想:

每个数出现的次数用一个桶表示出来。 形成一个个的柱子,然后向左推倒, 答案就是空位的个数。

注意:只有在区间内的点才可以向左推倒。

单点修改 和 区间修改。

 

具体看洛谷的题解吧。挺详细的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值