const int N = 1e6 + 5;
int tree[N],n;
void add(int k, int num)
{
for (int i = k;i <= n;i += i & -i)
tree[i] += num;
}
int read(int k)
{
int sum = 0;
for (int i = k;i > 0;i -= i & -i)
sum += tree[i];
return sum;
}
struct node
{
int l, r, id;
}e[N];
bool cmp(node a, node b)
{
return a.r < b.r;
}
int a[N];
int ans[N];
int main()
{
//freopen("in.txt", "r", stdin);
n = in();
f(i, 1, n)a[i] = in();
int q = in();
f(i, 1, q)
{
e[i].l = in();
e[i].r = in();
e[i].id = i;
}
sort(e + 1, e + 1 + q,cmp);
int j = 1;
unordered_map<int, int> mp;
f(i, 1, n)
{
if (mp[a[i]])add(mp[a[i]], -1);
mp[a[i]] = i;//上个从哪里开始的
add(i, 1);
while (j <= q && e[j].r == i)
ans[e[j].id] = read(e[j].r) - read(e[j].l - 1), j++;
}
f(i, 1, q)
{
printf("%d%c", ans[i],'\n');
}
return 0;
}
P1972 [SDOI2009]HH的项链(区间不同颜色数量)
最新推荐文章于 2020-11-28 00:02:49 发布