思路:
原本是一个莫队的模板题, 数据加强后1e6的数据范围显然莫队是过不去了.
将询问按r排序, 然后考虑从左往右扫描所有询问.
从左往右扫描时, 对于某个数, 只需要考虑其最右出现的位置.
可以使用一个树状数组维护位置信息. 若当前位置的数是最右位置的数则置为1, 否则置为0. 这样sum(r) - sum(l-1)便是询问的答案.
代码:
1 |
|
原本是一个莫队的模板题, 数据加强后1e6的数据范围显然莫队是过不去了.
将询问按r排序, 然后考虑从左往右扫描所有询问.
从左往右扫描时, 对于某个数, 只需要考虑其最右出现的位置.
可以使用一个树状数组维护位置信息. 若当前位置的数是最右位置的数则置为1, 否则置为0. 这样sum(r) - sum(l-1)便是询问的答案.
1 | #include <cstdio> |