Pagini recente » Cod sursa (job #666894) | Cod sursa (job #370186) | Cod sursa (job #2543465) | Cod sursa (job #2656456) | Cod sursa (job #3237034)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("distincte.in");
ofstream fout("distincte.out");
const int mod = 666013;
struct Query {
int st, dr, ind;
} q[100002];
int n, m, k, i, j, x[100002], a[100002], ult[100002];
int r[100002];
static inline int Ub(int a) {
return (a & -a);
}
static inline void Add(int poz, int val) {
for(int i = poz; i <= n; i += Ub(i)) a[i] = (a[i] + val) % mod;
}
static inline int Sum(int poz) {
int sum = 0;
for(int i = poz; i >= 1; i -= Ub(i)) sum = (sum + a[i]) % mod;
return sum;
}
static inline bool Cmp(Query a, Query b) {
return (a.dr < b.dr);
}
int main() {
fin >> n >> k >> m;
for(i = 1; i <= n; i++) fin >> x[i];
for(i = 1; i <= m; i++) {
fin >> q[i].st >> q[i].dr;
q[i].ind = i;
}
sort(q + 1, q + m + 1, Cmp);
j = 1;
for(i = 1; i <= n; i++) {
Add(i, x[i]);
if(ult[x[i]]) Add(ult[x[i]], -x[i]);
ult[x[i]] = i;
while(q[j].dr == i && j <= m) {
r[q[j].ind] = (Sum(i) - Sum(q[j].st - 1) + mod) % mod;
j++;
}
}
for(i = 1; i <= m; i++) fout << r[i] << "\n";
return 0;
}