HDU 4746 莫比乌斯反演+离线查询+树状数组
题目大意:
一个数字组成一堆素因子的乘积,如果一个数字的素因子个数(同样的素因子也要多次计数)小于等于P,那么就称这个数是P的幸运数
多次询问1<=x<=n,1<=y<=m,P , 找到多少对gcd(x,y)是P的幸运数
这里k定为k是P的幸运数
这跟之前做的http://www.cnblogs.com/CSU3901130321/p/4902748.html CSU1325的题目很像,但是这里求sum[]要复杂了很多
本来是枚举k,d求sum的,但是每次询问,P都在变,而我们需要得到的是一整串的k,假定G是P最大的幸运数,那么稍微想一下 就可以知道
k是在[1,G]的区间内的任何整数
那么我们将询问离线处理,按P小优先排序
那么一个个查询的时候,不断将k值更新前缀和,前缀和更新就很容易使用树状数组加速更新了,那么之后查询同样用树状数组就行了
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
#define ll long long
#define M 500000
#define lowbit(x) x&(-x)
int mu[M+] , prime[M] , check[M+] , tot , cnt[M+];//cnt[i]记录i有多少个素因子
ll f[M+],ans[M+];
int q;
vector<int> vec[M+]; void init()
{
for(int i= ; i<=M ; i++) vec[cnt[i]].push_back(i);
} void get_mu()
{
mu[]= , cnt[]=;
for(int i= ; i<=M ; i++){
if(!check[i]){
mu[i]=-;
cnt[i]=;
prime[tot++] = i;
}
for(int j= ; j<tot ; j++){
if(prime[j]*i>M) break;
check[i*prime[j]] = ;
cnt[i*prime[j]] = cnt[i]+;
if(i%prime[j]==) break;
else mu[i*prime[j]] = -mu[i];
}
}
} struct Query{
int n , m , p , id;
void read(int i){
scanf("%d%d%d" , &n , &m , &p);
id=i;
if(n>m) swap(n,m);
}
bool operator<(const Query &m)const {
return p<m.p;
}
}qu[M]; void update(int x , int v)
{
for(int i=x ; i<=M ; i+=lowbit(i))
f[i] = f[i]+v;
} ll query(int x)
{
ll ans = ;
for(int i=x ; i> ; i-=lowbit(i)) ans = ans+f[i];
return ans;
} void add_mul(int x)
{
int len = vec[x].size();
for(int i= ; i<len ; i++){
int fac = vec[x][i];
for(int d= ; d*fac<=M ; d++){
update(d*fac , mu[d]);
}
}
} ll cal(int n , int m)
{
ll ans=;
for(int t= , last ; t<=n ; t=last+){
last = min(n/(n/t) , m/(m/t));
ans = ans+(ll)(query(last) - query(t-))*(n/t)*(m/t);
}
return ans;
} void solve()
{
int cur = ;
for(int i= ; i<=q ; i++){
while(cur<=qu[i].p) add_mul(cur++);
ans[qu[i].id] = cal(qu[i].n , qu[i].m);
}
for(int i= ; i<=q ; i++) cout<<ans[i]<<endl;
} int main()
{
// freopen("a.in" , "r" , stdin);
get_mu();
init();
scanf("%d" , &q);
for(int i= ; i<=q; i++) qu[i].read(i);
sort(qu+ , qu+q+);
solve();
return ;
}
HDU 4746 莫比乌斯反演+离线查询+树状数组的更多相关文章
- BZOJ1878: [SDOI2009]HH的项链 (离线查询+树状数组)
1878: [SDOI2009]HH的项链 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1878 Description: HH有一串由 ...
- ACdream 1127 Base Station (离线查询+树状数组)
题目链接: http://acdream.info/problem?pid=1127 题目: 移动通信系统中,通信网的建立主要通过基站来完成. 基站可以分为主基站和子基站.子基站和各个移动用户进行连接 ...
- hdu 5869 区间不同GCD个数(树状数组)
Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
- 【bzoj4540】[Hnoi2016]序列 单调栈+离线+扫描线+树状数组区间修改区间查询
题目描述 给出一个序列,多次询问一个区间的所有子区间最小值之和. 输入 输入文件的第一行包含两个整数n和q,分别代表序列长度和询问数.接下来一行,包含n个整数,以空格隔开,第i个整数为ai,即序列第i ...
- 【loj6041】「雅礼集训 2017 Day7」事情的相似度 后缀自动机+STL-set+启发式合并+离线+扫描线+树状数组
题目描述 给你一个长度为 $n$ 的01串,$m$ 次询问,每次询问给出 $l$ .$r$ ,求从 $[l,r]$ 中选出两个不同的前缀的最长公共后缀长度的最大值. $n,m\le 10^5$ 题解 ...
- hdu 6203 ping ping ping(LCA+树状数组)
hdu 6203 ping ping ping(LCA+树状数组) 题意:给一棵树,有m条路径,问至少删除多少个点使得这些路径都不连通 \(1 <= n <= 1e4\) \(1 < ...
- bzoj3529(莫比乌斯反演+离线+树状数组)
在你以为理解mobus的时候,苦苦想通过化简公式来降低复杂度时,这题又打了我一巴掌. 看来我并没有理解到acmicpc比赛的宗旨啊. 这么多次查询可以考虑离线操作,使用树状数组单点更新. /***** ...
- HDU 4630 No Pain No Game 树状数组+离线查询
思路参考 这里. #include <cstdio> #include <cstring> #include <cstdlib> #include <algo ...
- HDU 5869 Different GCD Subarray Query 树状数组+离线
Problem Description This is a simple problem. The teacher gives Bob a list of problems about GCD (Gr ...
随机推荐
- 夺命雷公狗-----React---1--页面的渲染
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- s事件之event.preventDefault()与event.stopPropagation()的阻止默认事件和阻止事件冒泡的用法
event.preventDefault()用法介绍 该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作).例如,如果 type 属性是 "submit" ...
- 解决ADB端口占用问题
方式一5037为adb默认端口,若5037端口被占用,查看占用端口的进程PIDC:\Users\wwx229495>netstat -aon|findstr 5037 TCP 127. ...
- Delegate(委托与事件)
Delegate可以当它是一个占位符,比如你在写代码的时候并不知道你将要处理的是什么.你只需要知道你将要引入的参数类型和输出类型是什么并定义它即可.这就是书本上所传达的方法签名必须相同的意思. 系统自 ...
- ssh-keygen -t rsa P “” -f ~/.ssh/id_rsa不提示直接生成密钥
ssh-keygen -t rsa P "" -f ~/.ssh/id_rsa不提示直接生成密钥
- 操作SSIS之前的准备工作
SSIS的历史概述: 在SQL Server7.0中,微软成立了一个很小的开发团队开发SQL Server中一个非常低调的功能,该功能被称为DTS(数据转换服务),该功能一直被沿用到SQL2000. ...
- 02-FPGA设计流程介绍——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线——普利斯队长精心奉献 课程目标: 1.了解并学会FPGA开发设计的整体流程 2.设计一个二选一选择器并进行功能仿真.时序仿真以及板级验证 实验平台:芯航线FPGA开发板.杜邦线 实验内容: 良 ...
- apache svn subversion安装和配置(使用源码安装包方式)
环境:虚拟机下centos7 1.下载安装包:http://subversion.apache.org/download.cgi 2.上传到指定文件夹并解压 3.安装依赖包 apr apr-utils ...
- php curl的使用
我们来采集一个页面,通常情况下,我们会使用file_get_contents()函数来获取: <?php $str = file_get_contents('http://www.baidu.c ...
- GMF中,删除节点和连线的另一种实现
问题 在GMF中,如果需要programmatically删除节点或连线,在google中我们很容易搜索到<GMF中,删除节点和连线的实现>一文(我并不确定这是原创作者的原始链接),很多人 ...