NKOJ P3735 秀肌肉【莫队】

这里写图片描述
原来lym学长这么健美嘛…

嗯…这是一道比较板的莫队了,稍微修改一下 I n s e r t D e l e t e 即可。

对于 I n s e r t D e l e t e 的话,我们只需要先减去原来的 C n t [ X ] 2 ,然后进行相应的 C n t [ X ] 修改,最后在加上 C n t [ X ] 2 ,当然我们也可以把它展开,问题不大。

关键代码:

void Insert(LL X){
    Tot-=Cnt[X]*Cnt[X];++Cnt[X];Tot+=Cnt[X]*Cnt[X]; 
}
void Delete(LL X){
    Tot-=Cnt[X]*Cnt[X];--Cnt[X];Tot+=Cnt[X]*Cnt[X];
}
int main(){
    ...
    LL Left=1,Right=0;
    for(I=1;I<=T;I++){
        while(Right<Ask[I].Y){
            Insert(A[++Right]);
        }
        while(Right>Ask[I].Y){
            Delete(A[Right--]);
        }
        while(Left<Ask[I].X){
            Delete(A[Left++]);
        }
        while(Left>Ask[I].X){
            Insert(A[--Left]);
        }
        Ans[Ask[I].Id]=Tot;
    }
    ...
    return 0;
}

猜你喜欢

转载自blog.csdn.net/yanzhenhuai/article/details/81156130
今日推荐