Pagini recente » Cod sursa (job #1437808) | Cod sursa (job #922464) | Cod sursa (job #1706071) | Cod sursa (job #272557) | Cod sursa (job #2366638)
#include <bits/stdc++.h>
#define pii pair <int, int>
#define piii pair <pii, int>
#define mp make_pair
#define f first
#define s second
using namespace std;
ifstream fin ("distincte.in");
ofstream fout("distincte.out");
const int nMax = 100010, MOD = 666013;
int n, m, k, i, j;
int a[nMax], v[2*nMax], last[nMax], ans[nMax];
piii q[nMax];
void update(int poz, int val)
{
for (v[poz += n] = val; poz > 1; poz >>= 1) v[poz>>1] = (v[poz] + v[poz^1]) % MOD;
}
int query(int l, int r)
{
int res = 0;
for (l += n, r += n; l < r; l >>= 1, r >>= 1)
{
if (l&1) res = (res + v[l++]) % MOD;
if (r&1) res = (res + v[--r]) % MOD;
}
return res;
}
void read()
{
fin >> n >> k >> m;
for(i=1; i<=n; i++)
fin >> a[i];
for(i=1; i<=m; i++)
{
fin >> q[i].f.s >> q[i].f.f;
q[i].s = i;
}
}
void solve()
{
sort(q+1, q+m+1);
for(i=1; i<=m; i++)
{
for(j=q[i-1].f.f + 1; j<=q[i].f.f; j++)
{
if(last[a[j]]) update(last[a[j]], 0);
update(j, a[j]);
last[a[j]] = j;
}
ans[q[i].s] = query(q[i].f.s, q[i].f.f + 1);
}
for(i=1; i<=m; i++)
fout << ans[i] << '\n';
}
int main()
{
read();
solve();
return 0;
}