Cod sursa(job #1364290)

Utilizator retrogradLucian Bicsi retrograd Data 27 februarie 2015 16:35:06
Problema Distincte Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <vector>

#define mp make_pair
#define MAXN 100005

using namespace std;
typedef int var;

unordered_map<var, vector<var> >H;

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

var LOG[MAXN];

void build_log_table(var maxx) {
    for(var i=2; i<=maxx; i++) {
        LOG[i] = LOG[i/2] + 1;
    }
}

var lower(vector<var> &V, var ind) {
    var n = V.size();
    var i = (1 << LOG[n]);
    var poz = -1;
    for(;i;i>>=1) {
        if(poz+i<n && V[poz+i] <= ind) {
            poz += i;
        }
    }
    if(poz == -1) {
        return -1;
    }
    return V[poz];
}


int main()
{
    var n, k, val, q, a, b;
    fin>>n>>k>>q;
    build_log_table(n+1);
    for(var i=1; i<=n; i++) {
        fin>>val;
        H[val].push_back(i);
        if(H[val].size() == 1) {
            //BEG.push_back(mp(val, ind));
        }
    }

    while(q--) {
        fin>>a>>b;
        var sum = 0;
        for(auto &p : H) {

            var ind = lower(p.second, b);
            if(ind >= a) {
                sum += p.first;
            }
        }
        fout<<sum<<'\n';

    }

    return 0;
}