P1972 [SDOI2009] HH的项链 题解
补一个扫描线题解。
解法
一句话题意:给定一个序列,多次询问区间 [ l , r ] [l,r] [l,r] 中有多少种不同的数。
我们设序列中 a i a_i ai 上一次出现的位置为 p r e i pre_i prei,如果 a i a_i ai 没有出现过,则 p r e i = 0 pre_i = 0 prei=0。不难发现如果一种数在区间中出现多次,只会产生一次贡献。不妨钦定每种数产生贡献的位置是区间中第一次出现的位置,这时可以发现,产生的总贡献即为 p r e x ≤ l − 1 pre_x \le l - 1 prex≤l−1 的个数,反证法易证。
现在问题即为:给定一个序列 p r e pre pre,多次查询区间 [ l , r ] [l,r] [l,r] 中有多少个 p r e i ≤ l − 1 pre_i \le l - 1 pre