Cod sursa(job #3337405)

Utilizator amalia_ghicaAmalia Ghica amalia_ghica Data 27 ianuarie 2026 16:55:48
Problema Distincte Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
#include <algorithm>
#define int long long
using namespace std;
struct jd{
    int x, y, p, ans;
};
jd que[100005];
int sum[100005], nex[100005], f[100005], v[100005];
bool cmp(jd a, jd b){
    return a.x < b.x;
}
bool cmp2(jd a, jd b){
    return a.p < b.p;
}
signed main()
{
    ifstream cin("distincte.in");
    ofstream cout("distincte.out");
    int n, m, k, a;
    cin >> n >> k >> m;
    for(int i = 1; i <= n; i++){
        cin >> a;
        v[i] = a;
        if(f[a] == 0){
            sum[i] = a;
            f[a] = i;
        }else{
            nex[f[a]] = i;
            f[a] = i;
        }
    }
    for(int i = 1; i <= m; i++){
        cin >> que[i].x >> que[i].y;
        que[i].p = i;
    }
    sort(que + 1, que + m + 1, cmp);
    int lim = 1;
    for(int j = 1; j <= m; j++){
        while(lim < que[j].x){
            if(nex[lim] > 0){
                sum[nex[lim]] = v[nex[lim]];
            }
            sum[lim] = 0;
            lim++;
        }
        f[que[j].x] = sum[que[j].x];
        for(int i = que[j].x + 1; i <= n; i++){
            f[i] = f[i - 1] + sum[i];
        }
        que[j].ans = f[que[j].y];
    }
    sort(que + 1, que + 1 + m, cmp2);
    for(int i = 1; i <= m; i++){
        cout << que[i].ans << "\n";
    }
    return 0;
}