Pagini recente » Cod sursa (job #183924) | Cod sursa (job #2493157) | Cod sursa (job #163077) | Cod sursa (job #2213892) | Cod sursa (job #2715869)
#include <bits/stdc++.h>
#define MOD 666013
//#pragma GCC target ("avx2")
#pragma GCC optimize ("O3")
#pragma GCC optimize ("unroll-loops")
#pragma GCC optimize("Ofast")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
ifstream fin("distincte.in");
ofstream fout("distincte.out");
int Lbuck;
struct Query
{
int l, r, orig;
bool operator < (const Query &other) const
{
if(l / Lbuck == other.l / Lbuck)
return r < other.r;
return l / Lbuck < other.l / Lbuck;
}
}queries[100005];
long long sol;
int v[100005];
int fv[100005];
long long ans[100005];
void ADD(int poz)
{
fv[v[poz]]++;
if(fv[v[poz]] == 1)
sol += v[poz];
sol %= MOD;
}
void DEL(int poz)
{
fv[v[poz]]--;
if(fv[v[poz]] == 0)
sol -= v[poz];
if(sol < 0)
sol += MOD;
}
int main()
{
int N, M, K;
fin >> N >> K >> M;
Lbuck = sqrtl(N);
for(int i = 1; i <= N; i++)
fin >> v[i];
for(int i = 1; i <= M; i++)
{
fin >> queries[i].l >> queries[i].r;
queries[i].orig = i;
}
sort(queries + 1, queries + M + 1);
int st = 1, dr = 0;
for(int i = 1; i <= M; i++)
{
int l = queries[i].l;
int r = queries[i].r;
while(st < l)
DEL(st), st++;
while(dr > r)
DEL(dr), dr--;
while(dr < r)
dr++, ADD(dr);
while(st > l)
st--, ADD(st);
ans[queries[i].orig] = sol;
}
for(int i = 1; i <= M; i++)
fout << ans[i] << '\n';
return 0;
}