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 ...
随机推荐
- redis主从连接不成功错误
redis主从连接不成功错误 学习了:https://blog.csdn.net/wzqzhq/article/details/64919133 需要增加 masterauth password.. ...
- andrid对不能导入的类,知道类路径怎样使用该类
andrid对不能导入的类,知道类路径怎样使用该类?使用java的反射机制. 下边是一个样例. MTK平台对Android源生的Telephone接口进行了扩展,加入了一个TelephonyManag ...
- 无向图的点双连通分量(tarjan模板)
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #i ...
- 如何把网页或html内容生成图片
网页或html内容生成图片 今天想把做好的html内容或网页生成一张图片,没有网页在线版的生成或转换工具,除非下载客户端软件使用. 不过,发现可以利用搜狗高速浏览器和360浏览器生成图片,这里讲解 ...
- 从头认识java-15.7 Map(6)-介绍HashMap的工作原理-装载因子与性能
这一章节我们通过讨论装载因子与性能,再来介绍HashMap的工作原理. 1.什么是装载因子?他有什么作用? 以下的代码就是装载因子 /** * The load factor used when no ...
- 【HDOJ 5654】 xiaoxin and his watermelon candy(离线+树状数组)
pid=5654">[HDOJ 5654] xiaoxin and his watermelon candy(离线+树状数组) xiaoxin and his watermelon c ...
- px rem css 转换工具
http://520ued.com/tools/rem mark 一下 貌似还挺好用
- ASP.NET MVC模式——WebPages
WebPages 示例 123456<html> <body> <h1>Hello Web Pages</h1> <p>The time i ...
- 系统函数C字符串的实现(11):strchr
字符查找函数strchr char *mystrchr(const char *str, const char c) { char *p = NULL; for (char*newp = str; * ...
- 版本控制器 git
摘要:版本控制器是码农必备的工具,很多常用的,像svn,git,cvs等,工作中用过svn,Tortoisehg,firefly,其实大同小异,现在简单介绍下git,以及它的一些常用命令. 在wind ...