Cod sursa(job #3221892)

Utilizator Theo20067Cismaru Theodor-Alexe Theo20067 Data 8 aprilie 2024 12:27:17
Problema Distincte Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("distincte.in");
ofstream fout("distincte.out");
long long n,m,k,i,st,V[100003],sol[100003],A[400003],f[100003];
struct elem
{
    long long x,y,ind;
}Q[100003];
const long long MOD=666013;
void update(int poz,int val)
{
    for(poz;poz<=n;poz+=(poz&(-poz)))
        A[poz]+=val;
}
long long query(int poz)
{
    long long S=0;
    for(poz;poz;poz-=(poz&(-poz)))
        S+=A[poz];
    return S;
}
int main()
{
    fin>>n>>k>>m;
    for(i=1;i<=n;i++)
        fin>>V[i];
    for(i=1;i<=m;i++)
    {
        fin>>Q[i].x>>Q[i].y;
        Q[i].ind=i;
    }
    sort(Q+1,Q+m+1,[](elem a,elem b){return a.y<b.y;});
    st=1;
    for(i=1;i<=m;i++)
    {
        while(st<=Q[i].y)
        {
            if(f[V[st]])
                update(f[V[st]],-V[st]);
            f[V[st]]=st;
            update(st,V[st]);
            st++;
        }
        sol[Q[i].ind]=query(Q[i].y)-query(Q[i].x-1)%MOD;
        if(sol[Q[i].ind]<0)
            sol[Q[i].ind]+=MOD;
    }
    for(i=1;i<=m;i++)
        fout<<sol[i]%MOD<<"\n";
    return 0;
}