Codeforces86D【莫队算法】

题意:
给一个序列和一些区间,每次询问对区间所有不同的数,求每个不同的出现的个数的平方*其值的总和
2*2*1+1*1*2
思路:

裸的莫队算法。
补:
1.cmp写错。
2.LL运算不会进行转化。
3.莫队的起始应该直接先处理好L,R。
卡了将近2.5h,水题让自己很生气。以及不会查错误真的撒比!

#include 
using namespace std;
typedef long long LL;
typedef pair PII;
const int N=1e6+10;
LL num[N],res[N],c[N];
struct asd
{
    int id,left,right;
}e[200010];
int pos[200010];
int n,m;

bool cmp(asd x,asd y)
{
    if(pos[x.left]==pos[y.left])
        return x.righte[i].right)
        {
            num[c[R]]--;
            ans=ans-((num[c[R]]<<1)+1)*c[R];
            R--;
        }
        while(Le[i].left)
        {
            L--;
            ans=ans+((num[c[L]]<<1)+1)*c[L];
            num[c[L]]++;
        }
        res[e[i].id]=ans;
    }
    for(int i=0; i


你可能感兴趣的:(莫队算法)