Cod sursa(job #3259328)

Utilizator KRISTY06Mateiu Ianis Cristian Vasile KRISTY06 Data 25 noiembrie 2024 20:27:47
Problema Distincte Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.18 kb
#include <bits/stdc++.h>
using namespace std;

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

//set<int> tree[400001];

long long sum[400001];
int a[100001];
/*
void buildTree(int left, int right, int currentNode) {
    if (left == right) {
        tree[currentNode].insert(a[left]);
        sum[currentNode] = a[left];
        return;
    }
    buildTree(left, (left + right) / 2, currentNode * 2);
    buildTree((left + right) / 2 + 1, right, currentNode * 2 + 1);
    for (set<int>::iterator it = tree[currentNode * 2].begin(); it != tree[currentNode * 2].end(); ++it) {
        if (tree[currentNode].count(*it) == 0) {
            sum[currentNode] += *it;
        }
        tree[currentNode].insert(*it);
    }
    for (set<int>::iterator it = tree[currentNode * 2 + 1].begin(); it != tree[currentNode * 2 + 1].end(); ++it) {
        if (tree[currentNode].count(*it) == 0) {
            sum[currentNode] += *it;
        }
        tree[currentNode].insert(*it);
    }
}*/

/*long long query(int left, int right, int currentNode, int startPos, int endPos, bitset<100001> &fr) {
    if (right < startPos || left > endPos) {
        return 0;
    } else if (startPos <= left && right <= endPos) {
        long long s = 0;
        for (int i = left; i <= right; ++i) {
            if (fr[a[i]] == 0) {
                s += a[i];
            }
            fr[a[i]] = 1;
        }
        return s;
    }
    return query(left, (left + right) / 2, currentNode * 2, startPos, endPos, fr) + query((left + right) / 2 + 1, right, currentNode * 2 + 1, startPos, endPos, fr);
}*/

int main() {
    int n, k, m;
    fin >> n >> k >> m;
    for (int i = 1; i <= n; ++i) {
        fin >> a[i];
    }
  //  buildTree(1, n, 1);
    for (int i = 1; i <= m; ++i) {
        int startPos, endPos;
        fin >> startPos >> endPos;
        bitset<100001> fr = {0};
        long long s = 0;
        for (int j = startPos; j <= endPos; ++j) {
            if (fr[a[j]] == 0) {
                s += a[j];
            }
            fr[a[j]] = 1;
        }
        fout << s << '\n';
       // fout << query(1, n, 1, startPos, endPos, fr) << '\n';
    }
    return 0;
}