Pagini recente » Cod sursa (job #1707779) | Cod sursa (job #1826078) | Cod sursa (job #3159518) | Cod sursa (job #1226246) | Cod sursa (job #2470435)
#include <iostream>
#include <fstream>
#include <algorithm>
#define bit(x) (x & (-x))
using namespace std;
ifstream f("distincte.in");
ofstream g("distincte.out");
struct query
{
int st,dr,idx;
};
query q[100005];
bool cmp(const query &a,const query &b)
{
return a.dr<b.dr;
}
int n,m,a[100005],last[100005],aib[100005],ans[100005],k;
void update(int poz,int val)
{
for(int i=poz;i<=n;i+=bit(i))
{
aib[i]+=val;
}
}
int suma(int poz)
{
int s=0;
for(int i=poz;i>=1;i-=bit(i))
{
s+=aib[i];
}
return s;
}
int main()
{
int i,j;
f>>n>>k>>m;
for(i=1;i<=n;i++)
{
f>>a[i];
}
for(i=1;i<=m;i++)
{
f>>q[i].st>>q[i].dr;
q[i].idx=i;
}
sort(q+1,q+m+1,cmp);
j=1;
for(i=1;i<=n;i++)
{
if(last[a[i]]!=0)
{
update(last[a[i]],-a[i]);
}
last[a[i]]=i;
update(i,a[i]);
while(j<=m && q[j].dr==i)
{
ans[q[j].idx]=suma(q[j].dr)-suma(q[j].st-1);
j++;
}
}
for(i=1;i<=m;i++)
g<<ans[i]<<"\n";
return 0;
}