莫队裸题。

维护的时候有的打法是利用(a-1)^2==a^2-2*a+1转移,也可以,但是通用性不太够。

下面的打法就是先把这个点的贡献删掉,然后更新这个点,再把这个点的贡献加回来,这种解法更加通用一些。

剩下的是我分块的时候i/part打成n/part了,TLE30,改了就A了,还是要注意对拍呀。

#include<bits/stdc++.h>
using namespace std;
struct MoCap{
int l,r,id;
}q[];
int n,m,k,ans[],part,ans1,sum[],col[],bl[];
int read(){
int sum=,f=;char x=getchar();
while(x<''||x>''){
if(x=='-') f=-;
x=getchar();
}while(x>=''&&x<=''){
sum=sum*+x-'';
x=getchar();
}return sum*f;
}
bool cmp(MoCap a,MoCap b){
return (bl[a.l]^bl[b.l])?bl[a.l]<bl[b.l]:((bl[a.l]&)?a.r<b.r:a.r>b.r);
}
void updata(int i,int val){
ans1-=sum[col[i]]*sum[col[i]];
sum[col[i]]+=val;
ans1+=sum[col[i]]*sum[col[i]];
}
int main(){
n=read();m=read();k=read();part=sqrt(n);
for(int i=;i<=n;i++){
col[i]=read();
bl[i]=i/part+;
}
for(int i=;i<=m;i++){
q[i].l=read();q[i].r=read();
q[i].id=i;
}sort(q+,q++m,cmp);
int l=,r=;
// cout<<endl;
for(int i=;i<=m;i++){
while(l<q[i].l) updata(l++,-);
while(l>q[i].l) updata(--l,);
while(r<q[i].r) updata(++r,);
while(r>q[i].r) updata(r--,-);
// cout<<q[i].id<<" "<<ans1<<endl;
// for(int j=1;j<=n;j++)
// cout<<sum[col[j]]<<" ";cout<<endl;
ans[q[i].id]=ans1;
}
for(int i=;i<=m;i++)
printf("%d\n",ans[i]);
return ;
}

BZOJ3781小B的询问的更多相关文章

  1. [bzoj3781]小B的询问_莫队

    小B的询问 bzoj-3781 题目大意:给定一个n个数的序列,m次询问.每次询问一段区间内数的种类的平方和. 注释:$1\le n\,m\le 5\cdot 10^4$. 想法:莫队练习题. 我们考 ...

  2. BZOJ3781: 小B的询问

    3781: 小B的询问 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 146  Solved: 98[Submit][Status] Descript ...

  3. BZOJ3781:小B的询问(莫队)

    Description 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L ...

  4. [BZOJ3781]:小B的询问(离线莫队算法)

    题目传送门 题目描述 小B有一个序列,包含$N$个$1~K$之间的整数.他一共有$M$个询问,每个询问给定一个区间$[L...R]$,求$\sum \limits_{i=1}^{K}c(i)^2$的值 ...

  5. 【莫队算法】bzoj3781 小B的询问

    莫队经典. 开个数组维护a[i]出现的次数. #include<cstdio> #include<cmath> #include<algorithm> using ...

  6. BZOJ 3781: 小B的询问

    3781: 小B的询问 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 643  Solved: 435[Submit][Status][Discuss ...

  7. bzoj 3781: 小B的询问 分块

    3781: 小B的询问 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 196  Solved: 135[Submit][Status] Descrip ...

  8. Bzoj 3781: 小B的询问 莫队,分块,暴力

    3781: 小B的询问 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 426  Solved: 284[Submit][Status][Discuss ...

  9. P2709 小B的询问(莫队)

    P2709 小B的询问 莫队模板 资磁离线询问 维护两个跳来跳去的指针 先分块,蓝后询问按块排序. 蓝后每次指针左右横跳更新答案 #include<iostream> #include&l ...

随机推荐

  1. Django Rest framework序列化流程

    目录 一 什么是序列化 二 Django REST framework配置流程之Serializer 三 Django REST framework配置流程之ModelSerializer 一 什么是 ...

  2. IE hack大全

    IE hack大全:http://blog.csdn.net/freshlover/article/details/12132801

  3. 论文阅读之FaceNet: A Unified Embedding for Face Recognition and Clustering

    名称:FaceNet: A Unified Embedding for Face Recognition and Clustering 时间:2015.04.13 来源:CVPR 2015       ...

  4. js入门之内置对象Math

    一. 复习数据类型 简单数据类型, 基本数据类型/值类型 Number String Boolean Null Undefined 复杂数据类型 引用类型 Object 数组 数据在内存中是如何存储的 ...

  5. phpcms企业站的一些知识

    头header.html 尾footer.html 主页用index.html 列表页用list.html 单网页用page.html 内容页用show.html {template "co ...

  6. S3C2440 gpio + main

    相关文章:http://blog.csdn.net/zhangxuechao_/article/details/77990854 举例 start.S .globl _start _start: /* ...

  7. Redis其他数据结构

    用户日活月活怎么统计 - Redis HyperLogLog 详解 HyperLogLog 提出问题 我们先思考一个常见的业务问题:如果你负责开发维护一个大型的网站,有一天老板找产品经理要网站每个网页 ...

  8. TestNG并发执行用例详解和范例

    前言 TestNG有多种并发方式支持,方法的并发,class级的并发,test级的并发等:根据实际应用可以灵活的配置和使用,下面分别对几种并发方法进行说明: 一.方法级并发 方法级并发即method级 ...

  9. CSS之选择器相关

    一.选择器的作用 选择器就是用来选择标签的,要使用css对HTML页面中的元素实现一对一,一对多或者多对一的控制,这就需要用到CSS选择器. HTML页面中的元素就是通过CSS选择器进行控制的.每一条 ...

  10. rabbitmq二进制安装

    一.erland的安装 1.首先测试一下是否已经安装了erlang,命令 rpm -qa | grep erlang 2.没有安装则用yum安装 yum install erlang -y 二.下载r ...