预处理加树状数组进行优化
题目链接HDU 5997
题目大意
给你一个数组,数组中的数代表颜色,有两种操作,一是将数组中的X替换为Y,二是查询数组的某一子区间[x,y]中有多少段颜色。
题目解析
本题对时间要求较高。常规操作会超时,因此需要优化操作。
有多种优化。最初我只优化了修改操作,建立一个map表,并不真正修改数组中的值,而是直接map[x]=y,查询时取数组中的map值即可,但这种操作需要循环遍历整个数组来判断颜色段数,因此超时。之后我想到用树状数组来优化查询操作,动态维护树状数组b[],若节点i产生颜色变化,则节点i的值设为1,则update(i,1),因此查询时只需要sum[y]-sum[x]+1即可得到颜色段数。但当修改时,仍然需要for循环遍历,将某个位置的颜色x改为颜色y时,对不同的情况进行不同的维护操作。但仍然超时。后来受到同伴的启发,我们可以开个map
AC代码
|
|