Powerful array CodeForces - 86D

Posted qingyuyyyyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Powerful array CodeForces - 86D相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10; 
int n,m,block;
long long a[maxn],cnt[maxn];
long long ans,s[maxn];
struct node
{
    int l,r,id;
}q[maxn];
bool cmp(node x,node y)
{
    if(x.l/block!=y.l/block)
        return x.l<y.l;
    return x.r<y.r;
}
void add(long long x)
{
    ans-=cnt[x]*cnt[x]*x;
    cnt[x]++;
    ans+=cnt[x]*cnt[x]*x;
}
void del(long long x)
{
    ans-=cnt[x]*cnt[x]*x;
    cnt[x]--;
    ans+=cnt[x]*cnt[x]*x;
}
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        block=sqrt(n);
        memset(cnt,0,sizeof cnt);
        for(int i=1;i<=n;i++)
            scanf("%lld",&a[i]);
        for(int i=0;i<m;i++)
        {
            scanf("%d%d",&q[i].l,&q[i].r);
            q[i].id=i;
        }
        sort(q,q+m,cmp);
        int L=1,R=0;
        ans=0;
        for(int i=0;i<m;i++)
        {
            while(L<q[i].l) 
                del(a[L++]);
            while(L>q[i].l) 
                add(a[--L]);
            while(R<q[i].r) 
                add(a[++R]);
            while(R>q[i].r) 
                del(a[R--]);
            s[q[i].id]=ans;
        }
        for(int i=0;i<m;i++)
            printf("%lld
",s[i]);
    }
    return 0;
}

以上是关于Powerful array CodeForces - 86D的主要内容,如果未能解决你的问题,请参考以下文章

CodeForces 86D Powerful array(莫队算法)

Powerful array CodeForces - 86D (莫队算法)

Powerful array CodeForces - 86D

Powerful array CodeForces - 86D(莫队)

CodeForces - 86D Powerful array (莫队)

Codeforces1438 D. Powerful Ksenia(构造,异或性质)