Pagini recente » Cod sursa (job #2860787) | Cod sursa (job #1117343) | Cod sursa (job #412609) | Cod sursa (job #598861) | Cod sursa (job #3259070)
#include <bits/stdc++.h>
#define nmax 100005
#define ll long long
#define mod 666013
using namespace std;
ifstream fin("distincte.in");
ofstream fout("distincte.out");
struct cv {
int st;
int dr;
int poz;
friend bool operator<(const cv& a, const cv& b) {
return a.dr < b.dr;
}
};
ll n, k, m;
array<ll,nmax> v, aib, sh, sol;
array<cv,nmax> q;
void update(int p, int val) {
for (; p <= n; p += (p & -p)) {
aib[p] += val;
}
}
ll query(int p) {
ll sum = 0;
for (; p > 0; p -= (p & -p)) {
sum += aib[p];
}
return sum;
}
int main() {
fin >> n >> k >> m;
for (int i = 1; i <= n; i++) fin >> v[i];
for (int i = 1; i <= m; i++) {
fin >> q[i].st >> q[i].dr;
q[i].poz = i;
}
sort(q.begin() + 1, q.begin() + m + 1);
int j = 0;
for (int i = 1; i <= m; i++) {
while (j < q[i].dr) {
j++;
if (sh[v[j]]) {
update(sh[v[j]], -v[j]);
}
sh[v[j]] = j;
update(j, v[j]);
}
sol[q[i].poz] = (query(q[i].dr) - query(q[i].st - 1) + mod) % mod;
}
for (int i = 1; i <= m; i++) fout << sol[i] << '\n';
return 0;
}