Pagini recente » Cod sursa (job #1102880) | Cod sursa (job #1218068) | Cod sursa (job #2803137) | Cod sursa (job #1556578) | Cod sursa (job #1465403)
#include <iostream>
#include <stdio.h>
#include <algorithm>
#define NMax 100005
#define MOD 666013
using namespace std;
int N,M,K;
int a[NMax],poz[NMax],sol[NMax];
long long AIB[NMax];
struct Str
{
int s,d,indice;
}Q[NMax];
void Read()
{
freopen("distincte.in","r",stdin);
scanf("%d%d%d",&N,&K,&M);
for(int i=1;i<=N;i++)
scanf("%d",&a[i]);
for(int i=1;i<=M;i++)
{
scanf("%d %d",&Q[i].s,&Q[i].d);
Q[i].indice=i;
}
}
void Update(int k,int val)
{
for(;k<=N;k=k+k&(-k))
AIB[k]+=val;
}
long long Query(int k)
{
long long sum=0;
for(;k;k=k-k&(-k))
sum=sum+AIB[k];
return sum;
}
bool comp(const Str &a,const Str &b)
{
return a.d<b.d;
}
void Solve()
{
sort(Q+1,Q+M+1,comp);
for(int i=1,j=1;i<=N && j<=M;i++)
{
if(poz[a[i]])
Update(poz[a[i]],-a[i]);
poz[a[i]]=i;
Update(poz[a[i]],a[i]);
while(i==Q[j].d && j<=M)
{
sol[Q[j].indice]=(Query(i)-Query(Q[j].s-1))%MOD;
j++;
}
}
freopen("distincte.out","w",stdout);
for(int i=1;i<=M;i++)
printf("%d\n",sol[i]);
}
int main()
{
Read();
Solve();
}