一.题目链接:
SPOJ-DQUERY
二.题目大意:
求区间 [l, r] 中不同元素的个数.
三.分析:
先考虑区间右端点 r 的情形.
设有 5 个元素{1,2,2,3,5},每个元素最后出现的位置为{1,0,1,1,1}.
那么,区间[1,5]中不同元素的个数为 sum[5] - sum[0].
区间[1,4]中不同元素的个数为 sum[5] - sum[1].
其他区间同理.
现在再来考虑区间右端点变化的情形.
我们只需对每个右端点建立一颗线段树(区间求和)即可.
当然了,这里肯定要建主席树的.
详见代码.
四.代码实现:
#include
#include