Cod sursa(job #2925653)

Utilizator Diana_IonitaIonita Diana Diana_Ionita Data 15 octombrie 2022 20:38:35
Problema Distincte Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("distincte.in");
ofstream fout("distincte.out");
#define nmax 100005
long long i,n,k,j,m,aib[100005];
#define mod 666013
struct cvv
{
    long long st,dr,poz;
} a[nmax];
long long x[nmax],last[nmax],sol[nmax];
void update(long long poz, long long val)
{
    long long i;
    for(i=poz; i<=n; i+=i&(-i))
        aib[i]+=val;
}

long long query(long long poz)
{
    long long i,s=0;
    for(i=poz; i>=1; i-=i&(-i))
        s+=aib[i];
    return s;
}
long long comp(cvv a, cvv b)
{
    if(a.dr==b.dr)
        return a.st<b.st;
    return a.dr<b.dr;
}
int main()
{
    fin>>n>>k>>m;
    for(i=1; i<=n; i++)
    {
        fin>>x[i];
        update(i,x[i]);
    }
    for(i=1; i<=m; i++)
    {
        fin>>a[i].st>>a[i].dr;
        a[i].poz=i;
    }
    sort(a+1,a+m+1,comp);
    i=1;
    for(j=1; j<=m; j++)
    {
        while(i<=a[j].dr)
        {
            if(last[x[i]])
            {
                update(last[x[i]],-x[i]);

            }
            last[x[i]]=i;
            i++;
        }
        sol[a[j].poz]=query(a[j].dr)-query(a[j].st-1);
    }
    for(j=1; j<=m; j++)fout<<sol[j]%mod<<'\n';

    return 0;
}