Cod sursa(job #1236710)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 2 octombrie 2014 15:28:34
Problema Distincte Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <cstdio>
#include <vector>
#define Nmax 100005

using namespace std;

struct qry
{
    int st,poz;
};
vector <qry> L[Nmax];
int N,poz[Nmax],a[Nmax];
long long sol[Nmax],aib[Nmax];

inline void Update(int poz, int val)
{
    int i;
    for(i=poz;i>0;i-=(i&(-i)))
        aib[i]+=val;
}

inline long long Query(int poz)
{
    int i;
    long long sol=0;
    for(i=poz;i<=N;i+=(i&(-i)))
        sol+=aib[i];
    return sol;
}

int main()
{
    int i,x,y,K,M;
    vector <qry>::iterator it;
    qry w;
    freopen ("distincte.in","r",stdin);
    freopen ("distincte.out","w",stdout);
    scanf("%d%d%d", &N,&K,&M);
    for(i=1;i<=N;++i)
        scanf("%d", &a[i]);
    for(i=1;i<=M;++i)
    {
        scanf("%d%d", &x,&y);
        w.st=x; w.poz=i; L[y].push_back(w);
    }
    for(i=1;i<=N;++i)
    {
        Update(i,a[i]); Update(poz[a[i]],-a[i]);
        poz[a[i]]=i;
        for(it=L[i].begin();it!=L[i].end();++it)
            sol[it->poz]=Query(it->st);
    }
    for(i=1;i<=M;++i)
        printf("%lld\n", sol[i]);
    return 0;
}