Pagini recente » Cod sursa (job #1524342) | Cod sursa (job #30682) | Profil ScariCC | Cod sursa (job #2461457)
#include<cstdio>
#include<fstream>
#include<algorithm>
using namespace std;
FILE *f=fopen("distincte.in","r");
ofstream g("distincte.out");
struct elem
{
int st,dr,index;
};
elem q[100002];
inline bool cmp(const elem &a,const elem &b)
{
if(a.dr==b.dr)
return a.st<b.st;
return a.dr<b.dr;
}
int v[100002],prv[100002],sol[100002],n;
int AIB[100002];
int querySum(int poz) {
int answer = 0;
for (int i = poz; i > 0; i -= i & -i)
answer += AIB[i];
return answer;
}
void update(int poz, int add) {
for (int i = poz; i <= n; i += i & -i)
AIB[i] += add;
}
int main()
{
int m,k,i,j;
fscanf(f,"%d%d%d",&n,&k,&m);
for(i=1;i<=n;i++)
{
fscanf(f,"%d",&v[i]);
update(i,v[i]);
}
for(i=1;i<=m;i++)
fscanf(f,"%d%d",&q[i].st,&q[i].dr),q[i].index=i;
sort(q+1,q+m+1,cmp);
i=1;
for(j=1;j<=m;j++)
{
while(i<=q[j].dr)
{
if(prv[v[i]]!=0)
update(prv[v[i]],-v[i]);
prv[v[i]]=i;
i++;
}
sol[q[j].index]=querySum(q[j].dr)-querySum(q[j].st-1);
}
for(i=1;i<=m;i++)
g<<sol[i]<<'\n';
return 0;
}