Pagini recente » Cod sursa (job #909944) | Cod sursa (job #3354544) | Cod sursa (job #3353073) | Diferente pentru admin/task-ratings-guidelines intre reviziile 11 si 10 | Cod sursa (job #3337405)
#include <fstream>
#include <algorithm>
#define int long long
using namespace std;
struct jd{
int x, y, p, ans;
};
jd que[100005];
int sum[100005], nex[100005], f[100005], v[100005];
bool cmp(jd a, jd b){
return a.x < b.x;
}
bool cmp2(jd a, jd b){
return a.p < b.p;
}
signed main()
{
ifstream cin("distincte.in");
ofstream cout("distincte.out");
int n, m, k, a;
cin >> n >> k >> m;
for(int i = 1; i <= n; i++){
cin >> a;
v[i] = a;
if(f[a] == 0){
sum[i] = a;
f[a] = i;
}else{
nex[f[a]] = i;
f[a] = i;
}
}
for(int i = 1; i <= m; i++){
cin >> que[i].x >> que[i].y;
que[i].p = i;
}
sort(que + 1, que + m + 1, cmp);
int lim = 1;
for(int j = 1; j <= m; j++){
while(lim < que[j].x){
if(nex[lim] > 0){
sum[nex[lim]] = v[nex[lim]];
}
sum[lim] = 0;
lim++;
}
f[que[j].x] = sum[que[j].x];
for(int i = que[j].x + 1; i <= n; i++){
f[i] = f[i - 1] + sum[i];
}
que[j].ans = f[que[j].y];
}
sort(que + 1, que + 1 + m, cmp2);
for(int i = 1; i <= m; i++){
cout << que[i].ans << "\n";
}
return 0;
}