Pagini recente » Diferente pentru utilizator/wacky_coder intre reviziile 13 si 12 | Cod sursa (job #1947426) | Cod sursa (job #2440604) | Cod sursa (job #1744737) | Cod sursa (job #3337386)
#include <bits/stdc++.h>
using namespace std;
int k;
int aib[100005], v[100005];
void update(int poz, int val){
while(poz <= k){
aib[poz] += val;
poz += poz & -poz;
}
}
int queryy(int poz){
int ans = 0;
while(poz){
ans += aib[poz];
poz -= poz & -poz;
}
return ans;
}
int ans[100005], last[100005];
struct query{
int l, r, id;
bool operator< (const query& other) const{
return r < other.r;
}
}q[100005];
vector<int> qs[100005];
signed main(){
ifstream cin("distincte.in");
ofstream cout("distincte.out");
int n, m;
cin >> n >> k >> m;
for(int i = 1; i <= n; i++){
cin >> v[i];
last[i] = -1;
}
for(int i = 1; i <= m; i++){
cin >> q[i].l >> q[i].r;
qs[q[i].r].push_back(i);
}
int sum = 0;
for(int i = 1; i <= n; i++){
if(last[v[i]] == -1){
sum += v[i];
update(i, v[i]);
}
else{
update(i, v[i]);
update(last[v[i]], -v[i]);
}
last[v[i]] = i;
for(int id : qs[i]){
ans[id] = sum - queryy(q[id].l - 1);
}
}
for(int i = 1; i <= m; i++)
cout << ans[i] << '\n';
return 0;
}