Pagini recente » Cod sursa (job #1440264) | Cod sursa (job #755841) | Cod sursa (job #49633) | Cod sursa (job #1867100) | Cod sursa (job #2839081)
#include <bits/stdc++.h>
#define aici cout << "ok"
using namespace std;
const int nmax = 1e6;
int v[nmax+5];
set<int> t[4*nmax+5];
void build(int node, int left, int right) {
if(left==right) {
t[node].insert(v[left]);
return ;
}
int mid = (left + right) / 2;
build(node*2,left,mid);
build(node*2+1,mid+1,right);
for(auto i : t[node*2])
t[node].insert(i);
for(auto i : t[node*2+1])
t[node].insert(i);
}
set<int> rez;
void query(int node, int left, int right, int st, int dr) {
if(st<=left and right<=dr) {
for(auto i : t[node]) rez.insert(i);
return;
}
int mid = (left + right) / 2;
if(st<=mid)
query(node*2,left,mid,st,dr);
if(mid<dr)
query(node*2+1,mid+1,right,st,dr);
}
int main () {
ifstream f ("distincte.in");
ofstream g ("distincte.out");
int n,k,m; f >> n >> k >> m;
for(int i=1; i<=n; i++)
f >> v[i];
build(1,1,n);
for(int i=1; i<=m; i++) {
int st,dr; f >> st >> dr;
rez.clear();
query(1,1,n,st,dr);
int sum = 0;
for(auto i : rez) sum += i;
g << sum << "\n";
}
return 0;
}