题目链接
解题方法:离线统计 + 树状数组
题目分析
题目大意
给出n
个数字和m
个操作,操作分为查询Q和更改S,当查询时给出l, r, d, p
表示下标在查询[l, r]
区间内从低到高第d
位为p
的值的数量,当更改时给出X Y
表示将第X
个数的值修改为Y
,求出所有查询的结果。
解析
区间查询,很容易想到线段数和树状数组,但是从数据量来看,要枚举每一个数字的每一位,相当于需要三维数组(数字下标、每个数字的位下标、值),需要的空间太大,所以采取时间换空间的方式,我们枚举每个数字的位下标信息,这样只需要开二维数组(数的下标和值)即可解决问题。树状数组原本只需要一维数组即可解决问题,但是有十个值(0~9),所以在树状数组的更新函数以及求和函数需要加上值信息,相当于十个一维树状数组,查询时每次求区间的和即可。
参考链接:HDU 5057 Argestes and Sequence(树状数组+离线 OR 分块)——SIO_Five
代码
1 |
|