Pagini recente » Cod sursa (job #2286806) | Cod sursa (job #660463) | Cod sursa (job #770215) | Cod sursa (job #2935385) | Cod sursa (job #2330585)
#include <bits/stdc++.h>
using namespace std;
ifstream in("distincte.in");
ofstream out("distincte.out");
const int nmax=100005;
pair <int,int> querys[nmax];
int n,k,m,a[nmax],aib[nmax],st;
queue <int> valori[nmax];
void update(int p,int x)
{
for (;p<=n;p+=(p&(-p)))
aib[p]+=x;
}
int query(int p)
{
int s=0;
// cout<<"a";
for (;p>0;p-=(p&(-p)))
s+=aib[p];
return s;
}
void advance(int T)
{int i,x;
for (;st<T;st++)
{
x=a[st];
valori[x].pop();
if (!valori[x].empty())
{
update(st,-x);
update(valori[x].front(),x);
}
}
}
int main()
{
in>>n>>k>>m;
int i,q,w;
for (i=1;i<=n;i++)in>>a[i];
for (i=1;i<=m;i++)
{
in>>q>>w;
querys[i]={q,w};
}
sort (querys+1,querys+1+m);
st=querys[1].first;
int x;
for (i=st;i<=n;i++)
{
x=a[i];
valori[x].push(i);
if (valori[x].size()==1)update(i,x);
}
for (i=1;i<=m;i++)
{
if (st<querys[i].first)
{
advance(querys[i].first);
}
out<<query(querys[i].second)<<"\n";
}
out.close();
in.close();
return 0;
}