Pagini recente » Cod sursa (job #345787) | Cod sursa (job #277669) | Cod sursa (job #783161) | Cod sursa (job #730283) | Cod sursa (job #2627258)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("distincte.in");
ofstream out("distincte.out");
struct queryElement{
int st, dr, id;
long long ans;
};
int n, k, m, qCont = 1;
int v[100005], last[100005];
long long aib[100005];
queryElement q[100005];
void scan()
{
in >> n >> k >> m;
for(int i = 1; i <= n; i++)
in >> v[i];
for(int i = 1; i <= m; i++)
{
in >> q[i].st >> q[i].dr;
q[i].id = i;
}
}
bool drComp(queryElement a, queryElement b)
{
if(a.dr == b.dr)
return(a.st < b.st);
return(a.dr < b.dr);
}
bool idComp(queryElement a, queryElement b)
{
return(a.id < b.id);
}
void update(int poz, int val)
{
for(int i = poz; i <= n; i += i & -i)
aib[i] += val;
}
long long query(int poz)
{
long long sum = 0;
for(int i = poz; i > 0; i -= i & -i)
sum += aib[i];
return sum;
}
int main()
{
scan();
sort(q + 1, q + m + 1, drComp);
for(int i = 1; i <= n; i++)
{
if(last[v[i]] != 0)
update(last[v[i]], -v[i]);
last[v[i]] = i;
update(i, v[i]);
if(q[qCont].dr == i)
{
q[qCont].ans = query(q[qCont].dr) - query(q[qCont].st - 1);
qCont++;
}
}
sort(q + 1, q + m + 1, idComp);
for(int i = 1; i <= m; i++)
out << q[i].ans << '\n';
return 0;
}