1 #include<cstdio>
2 #include<cstdlib>
3 #include<cmath>
4 #include<cstring>
5 #include<algorithm>
6 #include<iostream>
7 #include<vector>
8 #include<map>
9 #include<set>
10 #include<queue>
11 #define inf 1000000000
12 #define maxn 1000000+1000
13 #define maxm 1000000+1000
14 #define maxk 1000000+1000
15 #define eps 1e-10
16 #define ll long long
17 #define pa pair<int,int>
18 using namespace std;
19 inline int read()
20 {
21 int x=0,f=1;char ch=getchar();
22 while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
23 while(ch>=‘0‘&&ch<=‘9‘){x=10*x+ch-‘0‘;ch=getchar();}
24 return x*f;
25 }
26 struct rec{int x,y,id;}a[maxm];
27 int s[maxn],ans[maxm],next[maxn],head[maxk],n,m,mx,b[maxn],c;
28 void add(int x,int y)
29 {
30 for(;x<=n;x+=x&(-x))s[x]+=y;
31 }
32 int sum(int x)
33 {
34 int t=0;
35 for(;x;x-=x&(-x))t+=s[x];
36 return t;
37 }
38 bool cmp(rec a,rec b)
39 {
40 return a.x==b.x?a.y<b.y:a.x<b.x;
41 }
42 int main()
43 {
44 freopen("input.txt","r",stdin);
45 freopen("output.txt","w",stdout);
46 n=read();c=read();m=read();
47 for(int i=1;i<=n;i++)b[i]=read();
48 for(int i=n;i>=1;i--)
49 {
50 next[i]=head[b[i]];
51 head[b[i]]=i;
52 }
53 for(int i=1;i<=m;i++)
54 a[i].x=read(),a[i].y=read(),a[i].id=i;
55 sort(a+1,a+m+1,cmp);
56 for(int i=1;i<=c;i++)if(next[head[i]])add(next[head[i]],1);
57 int now=1;
58 for(int i=1;i<=m;i++)
59 {
60 while(now<a[i].x)
61 {
62 if(next[now])add(next[now],-1);
63 if(next[next[now]])add(next[next[now]],1);
64 now++;
65 }
66 ans[a[i].id]=sum(a[i].y)-sum(a[i].x-1);
67 }
68 for(int i=1;i<=m;i++)printf("%d\n",ans[i]);
69 return 0;
70 }