Cod sursa(job #1541957)

Utilizator cristibogdanPatrascu Cristian cristibogdan Data 4 decembrie 2015 19:38:52
Problema Distincte Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("distincte.in");
ofstream g("distincte.out");
struct du{int st, dr, poz;}
a[100011];
int v[100011],n,m,k,i,j,x;
long long Rez[100011],vv[100011],AIB[100011];
void update(int poz, long long c)
{
     if (poz==0) return;
    int i;
    for(i=poz;i<=n; i+=(i&(-i)))
    {
        AIB[i]+=c;
    }
}
long long query(int x)
{
    int i;
    long long val=0;
    for(i=x;i>0;i-=(i&(-i)))
    {
        val+=AIB[i];
    }
    return val;
}
bool cmp(du a, du b)
{
    return a.dr < b.dr;
}

int main()
{
    f>>n>>k>>m;
    for(i=1;i<=n;i++)
        f>>v[i];

    for (int i=1; i<=m; ++i)
        {
            f>>a[i].st>>a[i].dr;
            a[i].poz=i;
        }
    sort(a+1, a+m+1, cmp);

    int i,j;
    for (i=1,j=1;i<= m;++i) {
        while(j<=a[i].dr) {
            update (vv[v[j]],-v[j]);
            update (j,v[j]);
            vv[v[j]]=j;
            j++;
        }
  Rez[a[i].poz] = (query (a[i].dr) - query (a[i].st - 1))%666013;
    }
        for (i=1; i<=m; ++i)
        g<<Rez[i]<<'\n';





    return 0;
}