Pagini recente » Cod sursa (job #3257175) | Cod sursa (job #1165959) | Cod sursa (job #2796259) | Cod sursa (job #2693567) | Cod sursa (job #2633475)
#include<bits/stdc++.h>
#define MOD 666013
using namespace std;
ifstream fin ("distincte.in");
ofstream fout("distincte.out");
long long aib[100002];
int n,lastpoz[100002],v[100002],sol[100002];
struct el
{
int st,dr,ord;
} q[100002];
bool cmp (const el &a,const el &b)
{
if (a.st== b.st)
{
if (a.dr== b.dr)
return a.ord<b.ord;
return a.dr<b.dr;
}
return a.st<b.st;
}
void update(int poz,int val)
{
int i;
for (i=poz;i<=n;i+=i&-i)
aib[i]+=val;
}
long long query (int poz)
{
int i;
long long sum=0;
for (i=poz;i>=1;i-=i&-i)
sum+=aib[i];
return sum;
}
int main()
{
int i,k,m,x,poz=1;
fin>>n>>k>>m;
for (i=1;i<=n;i++)
{
fin>>v[i];
update(i,v[i]);
}
for (i=1;i<=m;i++)
{
fin>> q[i].st>>q[i].dr;
q[i].ord=i;
}
sort(q+1,q+m+1,cmp);
for (i=1;i<=m;i++)
{
while (poz<=q[i].dr)
{
if (lastpoz [v[poz]] !=0)
update(lastpoz[v[poz]], -v[poz]);
lastpoz[v[poz]]= poz;
poz++;
}
sol[q[i].ord]=query(q[i].dr)%MOD;
}
for (i=1;i<=m;i++)
fout<<sol[i]<<'\n';
return 0;
}