Cod sursa(job #3337388)

Utilizator Iustin_Mircea2010Iustin Mircea Iustin_Mircea2010 Data 27 ianuarie 2026 16:20:48
Problema Distincte Scor 15
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <bits/stdc++.h>
#define int long long
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;
}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;
}