Cod sursa(job #3337418)

Utilizator iulia_morariuIuli Morariu iulia_morariu Data 27 ianuarie 2026 17:48:51
Problema Distincte Scor 35
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>
#define in  fin
#define out fout
#define int long long

using namespace std;
const int NMAX = 1e5 + 5;

ifstream fin("distincte.in");
ofstream fout("distincte.out");

int aib[NMAX];

void add(int p, int x){
    while(p < NMAX){
        aib[p] += x;
        p += (p & (-p));
    }
}

int query(int p){
    int sum = 0;
    while(p){
        sum += aib[p];
        p -= (p & (-p));
    }
    return sum;
}

int lp[NMAX];
vector< pair<int, int> > endss[NMAX];

signed main()
{
    int n, k, q; in >> n >> k >> q;
    int v[n];
    for(int i = 0; i < n; i++) in >> v[i];

    for(int i = 1; i <= k; i++) lp[i] = -1;

    int sol[q];
    for(int i = 0; i < q; i++){
        int l, r; in >> l >> r;
        l--; r--;
        endss[r].push_back({l, i});
    }

    for(int i = 0; i < n; i++){
        add(i + 1, v[i]);
        if(lp[v[i]] != -1) add(lp[v[i]] + 1, -v[i]);
        lp[v[i]] = i;

        for(const pair<int, int> &x : endss[i]){
            sol[x.second] = query(i + 1) - query(x.first);
        }
    }

    for(int i = 0; i < q; i++) out << sol[i] << "\n";

    return 0;
}