Pagini recente » Cod sursa (job #1781492) | Cod sursa (job #284025) | Monitorul de evaluare | Cod sursa (job #537840) | Cod sursa (job #2271853)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct tst{
int r, i;
};
ll n, m, test, aib[100005], v[100005], b[100005], last[100005], ans[100005];
vector<int> r[100005];
vector<tst> q[100005];
void update(ll idx, ll val)
{
while(idx <= n){
aib[idx] += val;
idx += (idx & (-idx));
}
}
ll read(ll idx)
{
ll sum = 0;
while(idx){
sum += aib[idx];
idx -= (idx & (-idx));
}
return sum;
}
int main()
{
ifstream fin ("distincte.in");
ofstream fout ("distincte.out");
fin >> n >> m >> test;
for (ll i = 1; i <= n; ++i){
fin >> v[i];
b[i] = last[v[i]];
r[b[i]].push_back(i);
last[v[i]] = i;
}
for (int t = 1; t <= test; ++t){
ll l, r;
fin >> l >> r;
q[l].push_back({r, t});
}
for (int t = 1; t <= n; ++t){
for (auto x : r[t-1])
update(x, v[x]);
for (auto Q : q[t])
ans[Q.i] = read(Q.r)-read(t-1);
}
for (int i = 1; i <= test; ++i)
fout << ans[i] << "\n";
return 0;
}