Pagini recente » Cod sursa (job #469328) | Cod sursa (job #297197) | Cod sursa (job #2845880) | Cod sursa (job #5765) | Cod sursa (job #1455936)
#include<stdio.h>
#include<algorithm>
#define maxn 100005
#define MOD 666013
using namespace std;
struct interv{int l,r,ind;} q[maxn];
int n,m,K;
int a[maxn],pos[maxn];
int sol[maxn];
long long aib[maxn];
void read()
{
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].l,&q[i].r),q[i].ind=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+=aib[k];
return sum;
}
bool cmp(const interv &x,const interv &y){
return x.r<y.r;
}
void solve()
{
sort(q+1,q+m+1,cmp);
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].r && j<=m)
{
sol[q[j].ind]=(query(i)-query(q[j].l-1))%MOD;
j++;
}
}
}
void print()
{
for(int i=1;i<=m;i++)
printf("%d\n",sol[i]);
}
int main()
{
freopen("distincte.in","r",stdin);
freopen("distincte.out","w",stdout);
read();
solve();
print();
fclose(stdin);
fclose(stdout);
return 0;
}