【bzoj2506】calc 根号分治+STL-vector+二分+莫队算法
题目描述
输入
输出
样例输入
5 2
1 5 2 3 7
1 3 2 1
2 5 3 0
样例输出
2
1
题解
根号分治+STL-vector+二分+莫队算法
对于$p\le \sqrt A$的部分,由于只有$\sqrt A$种模数,因此我们可以开$vector[i][j]$维护模$i$等于$j$的数的出现位置,查询时直接在$vector[p][k]$上二分即可。这个过程预处理时间是$O(n\sqrt A)$,单次查询时间是$O(log n)$。
对于$p>\sqrt A$的部分,考虑到满足$\mod p=k$的数最多只有$\sqrt A$个,因此可以暴力统计这些数中的每一个在序列中的出现次数。由于此时再使用vector+二分的话时间复杂度为$O(n\sqrt A\log n)$,会TLE,因此需要使用莫队算法并使用桶来维护每个数的出现次数。这样极限复杂度为$O(n\sqrt n+n\sqrt A)$。
因此总的最坏时间复杂度为$O(n\sqrt n+n\sqrt A)$。
#include <cmath>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> v[210][210];
int a[100010] , cnt[10010] , ans[100010] , si , tot;
struct data
{
int l , r , p , k , id;
bool operator<(const data &a)const {return (l - 1) / si == (a.l - 1) / si ? r < a.r : l < a.l;}
}q[100010];
int main()
{
int n , m , i , j , w , x , y , z , lp = 1 , rp = 0;
scanf("%d%d" , &n , &m) , si = (int)sqrt(n);
for(i = 1 ; i <= n ; i ++ )
{
scanf("%d" , &a[i]);
for(j = 1 ; j <= 100 ; j ++ )
v[j][a[i] % j].push_back(i);
}
for(i = 1 ; i <= m ; i ++ )
{
scanf("%d%d%d%d" , &w , &x , &y , &z);
if(y <= 100) ans[i] = upper_bound(v[y][z].begin() , v[y][z].end() , x) - lower_bound(v[y][z].begin() , v[y][z].end() , w);
else q[++tot].l = w , q[tot].r = x , q[tot].p = y , q[tot].k = z , q[tot].id = i;
}
sort(q + 1 , q + tot + 1);
for(i = 1 ; i <= tot ; i ++ )
{
while(lp > q[i].l) lp -- , cnt[a[lp]] ++ ;
while(rp < q[i].r) rp ++ , cnt[a[rp]] ++ ;
while(lp < q[i].l) cnt[a[lp]] -- , lp ++ ;
while(rp > q[i].r) cnt[a[rp]] -- , rp -- ;
for(j = q[i].k ; j <= 10000 ; j += q[i].p) ans[q[i].id] += cnt[j];
}
for(i = 1 ; i <= m ; i ++ ) printf("%d\n" , ans[i]);
return 0;
}
【bzoj2506】calc 根号分治+STL-vector+二分+莫队算法的更多相关文章
- 莫队算法/二分查找 FZU 2072 Count
题目传送门 题意:问区间内x的出现的次数分析:莫队算法:用一个cnt记录x的次数就可以了.还有二分查找的方法 代码: #include <cstdio> #include <algo ...
- HDU 6278 - Just h-index - [莫队算法+树状数组+二分][2018JSCPC江苏省赛C题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6278 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...
- HDU5381【莫队算法+区间GCD特性】
前言: 主要最近在刷莫队的题,这题GCD的特性让我对莫队的使用也有了新的想法.给福利:神犇的一套莫队算法题 先撇开题目,光说裸的一个莫队算法,主要的复杂度就是n*sqrt(n)对吧,这里我忽略了一个左 ...
- hdu5381 The sum of gcd]莫队算法
题意:http://acm.hdu.edu.cn/showproblem.php?pid=5381 思路:这个题属于没有修改的区间查询问题,可以用莫队算法来做.首先预处理出每个点以它为起点向左和向右连 ...
- NBUT 1457 莫队算法 离散化
Sona Time Limit:5000MS Memory Limit:65535KB 64bit IO Format: Submit Status Practice NBUT 145 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7687 Solved: 3516[Subm ...
- Codeforces617 E . XOR and Favorite Number(莫队算法)
XOR and Favorite Number time limit per test: 4 seconds memory limit per test: 256 megabytes input: s ...
- Bzoj 2038---[2009国家集训队]小Z的袜子(hose) 莫队算法
题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色 ...
- 信心题--FUOJ2226(莫队算法)
http://acm.fzu.edu.cn/problem.php?pid=2226 信心题,还说是信心题,题目给的真好.但是一点都不像信心题. 又是一个新的算法,莫队算法 莫队算法是一个用数组就可以 ...
随机推荐
- 1.Mysql集群------Docker下的Mysql主从复制
前言: 实话说,我想做的是Mysql集群架构. 我的计划是: 1.实现Docker下的Mysql主从复制 2.实现MyCat基于Mysql的读写分离 3.实现MyCat的分库分表 4.实现pxc集群 ...
- SpringBoot学习7:springboot整合jsp
springboot内部对jsp的支持并不是特别理想,而springboot推荐的视图是Thymeleaf,对于java开发人员来说还是大多数人员喜欢使用jsp 1.创建maven项目,添加pom依赖 ...
- php扩展开发-INI配置
php.ini文件是用来保存各项扩展配置的文件,每个扩展都或多或少需要有一个定制化的配置,ini文件是一个很好的保存配置的方式,我们来看下怎么在自己的扩展里,使用到ini的配置功能 //创建ini的配 ...
- 使用shell脚本依据分区信息分批次的下载hive表格数据
今天的业务场景大概是这样的,我想把hive表格下载到本地文件系统,然后把这个文件传送到另一个服务器上. 但是这个业务场景一个核心问题就是说我本地机器内存有限,hive表格大概是70G,我是不可能全部下 ...
- C语言函数篇(四)函数的设计
1. 函数设计的时候,如果使用到全局变量,就尽量通过参数的形式传递进来 也就是说,保持 函数 跟 外部的交互 只有 参数 和 返回值 2. 在有参数的情况下,或者有数值输入的时候,要先进行错误判断. ...
- Git使用简单总结--源自廖雪峰网站
创建版本库git add加入到暂存区git commit -m" "加入到分支 时光机穿梭git satus查看仓库的当前状态git diff file 查看修改内容 版本回退HE ...
- CentOS网络设置 couldn't resolve host 'mirrorlist.centos.org问题解决
在VMWare上安装好centos后,使用yum安装nodejs报错:can not resolve host 'mirritlist.centos.org', 百度上很多都说在/etc/resolv ...
- ISCSI网络存储
ISCSI(iSCSI,Internet Small Computer System Interface) iSCSI技术实现了物理硬盘设备与TCP/IP网络协议的相互结合,使得用户可以通过互联网方便 ...
- 02,Python网络爬虫第二弹《http和https协议》
一.HTTP协议 1.官方概念: HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文 ...
- 使用CSS3制作各种形状
CSS3的一个非常酷的特性是允许我们创建各种规则和不规则形状的图形,从而可以减少图片的使用.以前只能在Photoshop等图像编辑软件中制作的复杂图形现在使用CSS3就可以完成了.通过使用新的CSS属 ...