Cod sursa(job #3344784)

Utilizator RosaSofianRosa Sofian RosaSofian Data 5 martie 2026 17:52:42
Problema Distincte Scor 35
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <fstream>
#include <algorithm>
#define int long long
using namespace std;

ifstream cin("distincte.in");
ofstream cout("distincte.out");

using ll= long long;
const int dim= 1e5+ 5;
const int limit= 1e5;
int v[dim], poz[dim];

struct ura{
    int st, dr, pozii;
}inter[dim];
ll rez[dim], t[dim];

bool cmp(ura a, ura b){
    return ((a.dr < b.dr) or (a.dr== b.dr and a.st < b.st));
}
ll suma= 0;

void update(int poz, int val){
    while(poz <= limit){
        t[poz]+= val;
        poz+= (poz& -poz);
    }
}

ll solve(int poz){
    ll suma= 0;
    while(poz >= 1){
        suma+= t[poz];
        poz-= (poz& -poz);
    }
    return suma;
}

ll query(int st, int dr){
    return solve(dr)- solve(st- 1);
}


signed main()
{
    int n, m, k, i, j, l, r;
    cin >> n>> k>> m;

    for(i= 1;i <= n;i++){
        cin >> v[i];
    }

    for(i= 1;i <= m;i++){
        cin >> inter[i].st>> inter[i].dr;
        inter[i].pozii= i;
    }

    sort(inter+ 1, inter+ 1+ m, cmp);

    for(i= 1;i <= m;i++){
        for(j= inter[i- 1].dr+ 1;j <= inter[i].dr;j++){
            //cout <<"j= "<< j<< endl;
            if(poz[v[j]] > 0)
                update(poz[v[j]], -v[j]);
            update(j, v[j]);
            poz[v[j]]= j;
        }
        rez[inter[i].pozii]= query(inter[i].st, inter[i].dr);
        //cout <<"help "<< endl;
    }

    for(i= 1;i <= m;i++)
        cout << rez[i]<< '\n';

    return 0;
}