1 #include <bits/stdc++.h>
2 using namespace std;
3 const int MAXN = 1000005;
4 struct query
5 {
6 int id, l, r;
7 bool operator < (const query &rhs) const
8 {
9 return l == rhs.l ? r < rhs.r : l < rhs.l;
10 }
11 }q[MAXN];
12 int n, a[MAXN], fst[MAXN], nxt[MAXN], BIT[MAXN], ans[MAXN];
13
14 void update(int x, int val)
15 {
16 for(; x <= n; x += x & -x)
17 BIT[x] += val;
18 }
19
20 int query(int x)
21 {
22 int ans = 0;
23 for(; x; x -= x & -x)
24 ans += BIT[x];
25 return ans;
26 }
27
28 int main()
29 {
30 int m, l = 0, c;
31 scanf("%d%d%d", &n, &c, &m);
32 for(int i = 1; i <= n; i++)
33 scanf("%d", a + i);
34 for(int i = n; i; i--)
35 nxt[i] = fst[a[i]], fst[a[i]] = i;
36 for(int i = 0; i <= c; i++)
37 if(nxt[fst[i]]) update(nxt[fst[i]], 1);
38 for(int i = 1; i <= m; i++)
39 scanf("%d%d", &q[i].l, &q[i].r), q[i].id = i;
40 sort(q + 1, q + m + 1);
41 for(int i = 1; i <= m; i++)
42 {
43 while(l < q[i].l - 1)
44 {
45 if(nxt[++l]) update(nxt[l], -1);
46 if(nxt[nxt[l]]) update(nxt[nxt[l]], 1);
47 }
48 ans[q[i].id] = query(q[i].r) - query(q[i].l - 1);
49 }
50 for(int i = 1; i <= m; i++)
51 printf("%d\n", ans[i]);
52 return 0;
53 }