Pagini recente » Cod sursa (job #716428) | Cod sursa (job #1848114) | Cod sursa (job #854113) | Cod sursa (job #3178641) | Cod sursa (job #2429148)
#include <fstream>
#include <algorithm>
#define DM 100005
#define mod 666013
using namespace std;
ifstream fin("distincte.in");
ofstream fout("distincte.out");
int n,m,i,j,k,v[DM],aib[DM],fr[DM];
struct numar{
int st,dr,nr,sol;
}a[DM];
int cmp(numar a, numar b){
if(a.dr==b.dr)
return a.st<b.st;
return a.dr<b.dr;
}
int recmp(numar a, numar b){
return a.nr<b.nr;
}
void update(int x, int val){
while(x<=n){
aib[x]=(aib[x]+val)%mod;
x+=(x&(-x));
}
}
int query(int x){
int s=0;
while(x>0){
s=(s+aib[x])%mod;
x-=(x&(-x));
}
return s;
}
int main(){
fin>>n>>k>>m;
for(i=1;i<=n;i++)
fin>>v[i];
for(i=1;i<=m;i++){
fin>>a[i].st>>a[i].dr;
a[i].nr=i;
}
sort(a+1,a+m+1,cmp);
i=1;
for(j=1;j<=m;j++){
while(i<=a[j].dr){
if(fr[v[i]])
update(fr[v[i]],-v[i]);
update(i,v[i]);
fr[v[i]]=i;
i++;
}
a[j].sol=(query(a[j].dr)-query(a[j].st-1))%mod;
}
sort(a+1,a+m+1,recmp);
for(i=1;i<=m;i++)
fout<<a[i].sol<<'\n';
return 0;
}