Pagini recente » Cod sursa (job #1135334) | Cod sursa (job #542733) | Cod sursa (job #1098928) | Cod sursa (job #405446) | Cod sursa (job #607949)
Cod sursa(job #607949)
# include <algorithm>
# include <cstdio>
using namespace std;
# define x first
# define y second
typedef long long ll;
const char *FIN = "distincte.in", *FOU = "distincte.out";
const int MAX = 100005, MOD = 666013;
pair <int, int> Q[MAX];
int N, M, K, V[MAX], prev[MAX], P[MAX], REZ[MAX];
ll aib[MAX];
void update (int nod, int val) {
if (nod == 0) return ;
for (; nod <= N; aib[nod] += val, nod += nod & -nod);
}
ll query (int nod) {
ll sol;
for (sol = 0; nod > 0; sol += aib[nod], nod -= nod & -nod);
return sol;
}
struct comp {
bool operator () (const int &A, const int &B) {
return Q[A].x < Q[B].x;
}
};
int main (void) {
freopen (FIN, "r", stdin);
freopen (FOU, "w", stdout);
scanf ("%d %d %d", &N, &K, &M);
for (int i = 1; i <= N; ++i)
scanf ("%d", V + i);
for (int i = 1; i <= M; ++i)
scanf ("%d %d", &Q[i].y, &Q[i].x), P[i] = i;
sort (P + 1, P + M + 1, comp ());
for (int i = 1, j = 1; i <= M; ++i) {
for (; j <= Q[P[i]].x; update (prev[V[j]], -V[j]), update (j, V[j]), prev[V[j]] = j++);
REZ[P[i]] = query (Q[P[i]].x) - query (Q[P[i]].y - 1);
}
for (int i = 1; i <= M; ++i)
printf ("%d\n", REZ[i]);
}