Cod sursa(job #1980380)

Utilizator tavonSuleyman Magnificul tavon Data 12 mai 2017 23:15:58
Problema Distincte Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("distincte.in");
ofstream out("distincte.out");

const int Nmax = 100001;
vector<int> ps[Nmax],qs[Nmax];
long long Ans[Nmax];
int Qx[Nmax],Qy[Nmax];
int v[Nmax],idx[Nmax];
int N,M,K;

long long A[Nmax];
int lsb(int x){return x&(-x);}
void upd(int x,long long  val){while(x<=N) A[x]+=val,x+=lsb(x);}
long long  query(int x){long long s=0;while(x) s+=A[x],x-=lsb(x);return s;}
long long intq(int a,int b){return query(b)-query(a-1);}

int main(){
	in>>N>>K>>M;
	for(int i=1;i<=N;i++){
		in>>v[i];
		ps[v[i]].push_back(i);
	}

	for(int i=1;i<=M;i++){
		in>>Qx[i]>>Qy[i];
		qs[Qy[i]].push_back(i);
	}
	for(int i=1;i<=N;i++){
		upd(i,v[i]);
		idx[v[i]]++;
		if(idx[v[i]]>1){
			int j=ps[v[i]][idx[v[i]]-2];
			upd(j,-v[j]);
		}
		for(auto it : qs[i]){
			Ans[it]=intq(Qx[it],Qy[it]);
		}
	}
	for(int i=1;i<=M;i++){
		out<<Ans[i]<<'\n';
	}
	return 0;
}