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 ...
随机推荐
- C#委托,事件最初浅的和最易看懂的学习笔记
对于委托和事件,看了不少博文,当时好像都理解了,过了一段时间,又忘记的差不多了.每每如此,感觉自己很笨,记性差,其实是没有深入理解透切,没有按照自己的语言表达出来,当然容易忘记.今天又花了一些时间,好 ...
- laravel框架总结(四) -- 服务容器
1.依赖 我们定义两个类:class Supperman 和 class Power,现在我们要使用Supperman ,而Supperman 依赖了Power class Supperman { p ...
- 2016年12月21日 星期三 --出埃及记 Exodus 21:16
2016年12月21日 星期三 --出埃及记 Exodus 21:16 "Anyone who kidnaps another and either sells him or still h ...
- 从yum源下载安装包及依赖包
局域网内所有linux都用yum从外网源安装软件有点浪费,尤其遇到下载慢的情况: 所以考虑下载后传到其他机器安装,还可以保证版本一致(创建一个本地仓库更好,这个后面研究了再记录): 首先安装yum工具 ...
- 读书笔记 1 of Statistics :Moments and Moment Generating Functions (c.f. Statistical Inference by George Casella and Roger L. Berger)
Part 1: Moments Definition 1 For each integer $n$, the nth moment of $X$, $\mu_n^{'}$ is \[\mu_{n}^{ ...
- Doolitter分解 三对角矩阵分解 拟三对角分解
#include <cstdio> #include <cstdlib> #include <algorithm> #include <cmath> # ...
- MySQL修改表一次添加多个列(字段)和索引
MySQL修改表一次添加多个列(字段) ALTER TABLE table_name ADD func varchar(50), ADD gene varchar(50), ADD genedetai ...
- AC自动机入门
Aho-Corasick automaton,该算法在1975年产生于贝尔实验室,是著名的多模式匹配算法之一. KMP算法很好的解决了单模式匹配问题,如果有了字典树的基础,我们可以完美的结合二者解决多 ...
- 邮箱输入(仿gmail)
年前同事做邮件,我调研了几个如163.qq等的邮箱,最终觉得还是gmail的用着舒服,看着也舒服.就仿照写了个.还有问题.记录下,有时间再整理下代码. demo
- 跨站脚本 XSS<一:防御方法>
1. 过滤特殊字符 避免XSS的方法之一主要是将用户所提供的内容进行过滤,许多语言都有提供对HTML的过滤: PHP的htmlentities()或是htmlspecialchars(). Pytho ...