Pagini recente » Cod sursa (job #1250929) | Cod sursa (job #1680076) | Cod sursa (job #732215) | Cod sursa (job #2677617) | Cod sursa (job #1045360)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
struct query{int x, y, nr;};
ifstream fin("distincte.in");
ofstream fout("distincte.out");
const int Nmax = 100010;
const int MOD = 666013;
int N, K, M, a[Nmax], aib[Nmax], indq[Nmax], uz[Nmax];
query q[Nmax];
bool cmp(const query a, const query b)
{
return a.y < b.y;
}
void Update(int poz, int val)
{
for(; poz <= N; poz += (poz & -poz))
aib[poz] = (aib[poz] + val) % MOD;
}
int Sum(int poz)
{
int rez = 0;
for(; poz; poz -= (poz & -poz))
rez = (rez + aib[poz]) % MOD;
return rez;
}
int main()
{
fin>>N>>K>>M;
for(int i=1; i<=N; i++)
fin>>a[i];
for(int i=1; i<=M; i++)
{
fin>>q[i].x>>q[i].y;
q[i].nr = i;
}
sort(q+1, q+M+1, cmp);
for(int i = 1; i <= M; i++)
{
for(int j = q[i-1].y + 1; j <= q[i].y; j++)
{
if(uz[a[j]]) Update(uz[a[j]], -a[j]);
uz[a[j]] = j; Update(j, a[j]);
}
indq[q[i].nr] = (Sum(q[i].y) - Sum(q[i].x - 1));
}
for(int i=1; i<=M; i++)
fout<<indq[i]<<'\n';
return 0;
}