Pagini recente » Cod sursa (job #2886593) | Cod sursa (job #1335693) | Cod sursa (job #334757) | Cod sursa (job #1187531) | Cod sursa (job #1465415)
#include<stdio.h>
#include<algorithm>
#define NMax 100005
#define MOD 666013
using namespace std;
struct STR{int s,d,indice;} Q[NMax];
int N,M,K;
int a[NMax],pos[NMax],sol[NMax];
long long AIB[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))
AIB[k]+=val;
}
long long Query(int k)
{
long long sum=0;
for(;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);
int i,j=1;
for(int i=1;i<=N && j<=M;i++)
{
if(pos[a[i]]) Update(pos[a[i]],-a[i]);
pos[a[i]]=i; Update(pos[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();
}