bzoj 3781 小B的询问——分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3781
非常经典的分块套路。于是时间空间比大家的莫队差了好多……
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N=5e4+,M=;
int n,m,w,base,a[N],cnt[M][N],ct[N];
ll sm[M][M],ans;
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='') ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return fx?ret:-ret;
}
int bh(int a){return (a-)/base+;}
void init()
{
int R=bh(n);
for(int i=;i<=R;i++)
{
int t=i*base,j=i;
if(t>n)
{
t=(i-)*base;
for(int k=t+;k<=n;k++)
sm[i][i]+=(cnt[i][a[k]]<<)+,cnt[i][a[k]]++;
j=i-;
}
for(;t;j--)
{
sm[i][j]+=sm[i][j+];//
for(int k=;k<=base;k++,t--)
{
sm[i][j]+=(cnt[i][a[t]]<<)+;
cnt[i][a[t]]++;
}
}
}
}
int main()
{
n=rdn(); m=rdn(); w=rdn();
base=sqrt(n);
for(int i=;i<=n;i++)a[i]=rdn();
init();
for(int i=,l,r,u,v;i<=m;i++)
{
l=rdn(); r=rdn(); u=bh(l); v=bh(r);
if(v-u<=)
{
ans=;
for(int j=l;j<=r;j++) ct[a[j]]=;
for(int j=l;j<=r;j++)
ans+=(ct[a[j]]<<)+,ct[a[j]]++;
printf("%lld\n",ans);continue;
}
ans=sm[v-][u+];
int L=u*base,R=(v-)*base;
for(int j=l;j<=L;j++)
{
ans+=((cnt[v-][a[j]]-cnt[u][a[j]])<<)+;
cnt[v-][a[j]]++;
}
for(int j=R+;j<=r;j++)
{
ans+=((cnt[v-][a[j]]-cnt[u][a[j]])<<)+;
cnt[v-][a[j]]++;
}
for(int j=l;j<=L;j++) cnt[v-][a[j]]--;
for(int j=R+;j<=r;j++) cnt[v-][a[j]]--;
printf("%lld\n",ans);
}
return ;
}
bzoj 3781 小B的询问——分块的更多相关文章
- bzoj 3781: 小B的询问 分块
3781: 小B的询问 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 196 Solved: 135[Submit][Status] Descrip ...
- Bzoj 3781: 小B的询问 莫队,分块,暴力
3781: 小B的询问 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 426 Solved: 284[Submit][Status][Discuss ...
- BZOJ 3781: 小B的询问
3781: 小B的询问 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 643 Solved: 435[Submit][Status][Discuss ...
- 洛谷P2709 BZOJ 3781 小B的询问 (莫队)
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...
- 洛谷 P2709 BZOJ 3781 小B的询问
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求$\sum_1^Kc_i^2$的值,其中$c_i$表示数字i在[L..R]中的重复次数.小B请 ...
- 【模板】BZOJ 3781: 小B的询问 莫队算法
http://www.lydsy.com/JudgeOnline/problem.php?id=3781 N个数的序列,每次询问区间中每种数字出现次数的平方和,可以离线. 丢模板: #include ...
- bzoj 3781 小B的询问 —— 莫队
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3781 就是莫队,左端点分块排序,块内按右端点排序,然后直接做即可. 代码如下: #inclu ...
- bzoj 3781 小B的询问(莫队算法)
[题意] 若干个询问sigma{ cnt[i]^2 } cnt[i]表示i在[l,r]内的出现次数. [思路] 莫队算法,裸题. 一个cnt数组即可维护插入与删除. [代码] #include< ...
- BZOJ 3781: 小B的询问 [莫队]
求区间每种颜色出现次数平方和 写裸题练手 #include <iostream> #include <cstdio> #include <algorithm> #i ...
随机推荐
- C# 解析迅雷链接成正常的Http链接
目前热门剧司马懿第一集的迅雷下载地址是: thunder://QUFodHRwOi8vZGwxMjIuODBzLmltOjkyMC8xNzA2L1vlpKflhptTU+mprOaHv+S5i+WGm ...
- 梦入IBM之java基础-网络编程
如今我们来谈谈最后的内容:网络编程: 1):TCP中是线程与线程进行通讯!内部的执行机制是这种:先有一个线程去监听某个port.然后假设有Socket连接上来了以后,server会生成一个Socket ...
- angular 资源路径问题
1.templateUrl .component("noData",{ templateUrl:"components/noData.html" // 注意相对 ...
- Linux安装Java/Maven
所需文件:jdk 下载 安装Java INSTALL_PATH=/opt/soft TAR_FILE=/mnt/d/resources/soft/jdk-8u152-linux-x64.tar.gz ...
- mysql (8.0 或以下)数据 卸载, 安装, 创建用户, 赋权
卸载 安装 创建用户wmxl create user 'wmxl'@'202.115.253.71' identified by '你的密码' 如果是mysql8.0,再输入以下 ALTER USER ...
- cuda9,cuda8分享百度云下载
一.文件名称: md5-cuda9cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64.debcuda-repo-ubuntu1604-9-0-local_9. ...
- mac osx 下编译 OpenWrt
默认的文件系统hfs大小写不敏感.新建一个磁盘镜像文件并合式化为hfs+, 然后挂载到系统中. hdiutil create -size 20g -fs "Case-sensitive HF ...
- 去除input框的值
onfocus="this.value=' ';" <input type="text" name="buynum" id=" ...
- 辛星浅析html5中的role属性
我们使用role属性告诉辅助设备.这个元素所扮演的角色.比方点击的按钮,我们通常就使用role="button",会让这个元素可点击. 可是它很多其它的是用来增强语义性,当现有的h ...
- EasyRTSPClient:基于live555封装的支持重连的RTSP客户端RTSPClient
今天先简单介绍一下EasyRTSPClient,后面的文章我们再仔细介绍EasyRTSPClient内部的设计过程: EasyRTSPClient:https://github.com/EasyDar ...