bzoj 3529 数表
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3529
题目大意:令F(i)为i的约数和,多次询问对于1<=x<=n,1<=y<=m,F(gcd(x,y))<=a的所有数对(x,y),求ΣF(gcd(x,y))%(2^31)
n,m<=10^5,a<=10^9
首先如果不考虑a的限制 令g(i)为1<=x<=n,1<=y<=m,gcd(x,y)=i的数的个数
那么显然有
利用线性筛处理出F(i) 那么答案显然是
治好了我多年的公式恐惧症。。。
现在我们只需要求出的前缀和 这个问题就能在O(√n)的时间内出解
枚举每一个i 枚举i的倍数 暴力即可求出这个函数 然后处理前缀和即可 复杂度是O(nlogn)的
那么现在有了a的限制怎么搞呢?
我们发现对答案有贡献的i只有F(i)<=a的i 那么我们将询问按照a从小到大排序 将F(i)从小到大排序 每次询问将<=a的F(i)按照之前的方式暴力插入 用树状数组来维护这个前缀和
这题就搞出来了
时间复杂度O(nlog^2n+q√nlogn) 有点卡。。。取模那里自然溢出int就行了 最后再对2147483647取一下&即可
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm> using namespace std;
const int mod=;
const int maxn=; int n,m,a;
int prime[maxn];
int cnt;
int vis[maxn];
int mu[maxn];
int sum[maxn]; struct node
{
int n,m,a,id;
}q[maxn]; bool cmp2(node x,node y)
{
return x.a<y.a;
} struct Node
{
int g;
int sum;
}f[maxn]; bool cmp1(Node a,Node b)
{
return a.sum<b.sum;
} long long ans[maxn];
long long c[maxn];
int lowbit(int x)
{
return x&-x;
} void add(int x,int d)
{
while(x<maxn)
{
c[x]+=d;
x+=lowbit(x);
}
} long long Sum(int x)
{
long long ans=;
while(x>)
{
ans += c[x];
x -= lowbit(x);
}
return ans;
} void init()
{
memset(vis,,sizeof(vis));
memset(f,,sizeof(f));
cnt=;
mu[]=;
for(int i=;i<maxn;i++)
{
if(!vis[i])
{
prime[cnt++]=i;
mu[i]=-;
}
for(int j=;j<cnt&&i*prime[j]<maxn;j++)
{
vis[i*prime[j]]=;
if(i%prime[j])
mu[i*prime[j]]=-mu[i];
else
{
mu[i*prime[j]]=;
break;
}
}
}
sum[]=;
for(int i=;i<maxn;i++)
sum[i]=sum[i-]+mu[i];
for(int i=;i<maxn;i++)
for(int j=i;j<maxn;j+=i)
f[j].sum += i;
for(int i=;i<maxn;i++)
f[i].g=i;
sort(f+,f+maxn,cmp1);
} long long cal(int n,int m)
{
if(n>m)
swap(n,m);
long long res=;
int last=;
for(int i=;i<=n;i=last+)
{
last=min(n/(n/i),m/(m/i));
res += (long long)(n/i)*(m/i)*(Sum(last)-Sum(i-));
}
return res;
} int main()
{
init();
int T;
scanf("%d",&T);
for(int i=;i<=T;i++)
{
scanf("%d%d%d",&q[i].n,&q[i].m,&q[i].a);
q[i].id=i;
}
sort(q+,q++T,cmp2);
memset(c,,sizeof(c));
int j=;
for(int i=;i<=T;i++)
{
while(j<maxn&&f[j].sum<=q[i].a)
{
int g=f[j].g;
for(int k=g;k<maxn;k+=g)
add(k,f[j].sum*mu[k/g]);
j++;
}
ans[q[i].id]=cal(q[i].n,q[i].m);
}
for(int i=;i<=T;i++)
printf("%lld\n",ans[i]%mod);
return ;
}
bzoj 3529 数表的更多相关文章
- 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&&bzoj 2820 YY的GCD&&BZOJ 3529 数表)
首先我们来看一道题 BZOJ 2301 Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd( ...
- BZOJ 3529 数表(莫比乌斯+树状数组)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3529 题意:有一张n×m的数表,其第i行第j列的数值为能同时整除i和j的所有自然数 ...
- bzoj 3529 数表 莫比乌斯反演+树状数组
题目大意: 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a的数之和. ...
- BZOJ 3529 数表(莫比乌斯反演)
http://www.lydsy.com/JudgeOnline/problem.php?id=3529 思路:令F(i)为i的约数和, 1<=x<=n,1<=y<=m G(i ...
- 【BZOJ 3529】 [Sdoi2014]数表 (莫比乌斯+分块+离线+树状数组)
3529: [Sdoi2014]数表 Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有 ...
- bzoj [SDOI2014]数表 莫比乌斯反演 BIT
bzoj [SDOI2014]数表 莫比乌斯反演 BIT 链接 bzoj luogu loj 思路 \[ \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}a*[f[ ...
- BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]
3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1399 Solved: 694[Submit][Status] ...
- bzoj 3529 [Sdoi2014]数表(莫比乌斯反演+BIT)
Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a ...
- ●BZOJ 3529 [Sdoi2014]数表
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3529 题解: 莫比乌斯反演. 按题目的意思,令$f(i)$表示i的所有约数的和,就是要求: ...
随机推荐
- 【Splay】例题
营业额统计 题目背景 HNOI2002 DAY2 T2 题目描述 Tiger 最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger 拿出了公司 ...
- (转)CentOS 7.0关闭默认防火墙启用iptables防火墙
场景:在本地虚拟机上使用ftp软件需要进行相应的端口设置,不可避免要访问Cnetos的防火墙,默认firewall操作不方便,所以需要进行相应的替换. 1 配置防火墙,开启80端口.3306端口 1. ...
- (转)Spring3MVC 在JSP中使用@ModelAttribute
原文连接:http://liukai.iteye.com/blog/973717,仅供自己参考. 在教程中,我们将创建一个简单的Spring3MVC simple CRUD应用程序. 什么是@Mode ...
- (转)Sublime Text中文乱码问题
Sublime Text 2是一个非常不错的源代码及文本编辑器,但是不支持GB2312和GBK编码在很多情况下会非常麻烦.不过Sublime Package Control所以供的插件可以让Subli ...
- WebService中的WSDL详解 及jmeter测试
首先简单讲解一下什么是wsdl. 一个WSDL文档通常包含8个重要的元素,即definitions.types.import.message.portType.operation.bin ...
- Angularjs跳转切换至对应选项卡
//跳转前页面 <div class="list user_order" ng-click="userOpen('userOrder',0)"> & ...
- 一次浴火重生的MySQL优化(EXPLAIN命令详解)
一直对SQL优化的技能心存无限的向往,之前面试的时候有很多面试官都会来一句,你会优化吗?我说我不太会,这时可能很多人就会有点儿说法了,比如会说不要使用通配符*去检索表.给常常使用的列建立索引.还有创建 ...
- HttpURLConnection getInputStream异常的解决
http://blog.csdn.net/q2232/article/details/48136973 但是当getResponseCode为自定义值,比如422时,httpURLConnection ...
- HDU-1495 非常可乐 (嵌套结构体-广搜 对比 一般广搜)
题意 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但 ...
- 46. leetcode 500. Keyboard Row
500. Keyboard Row Given a List of words, return the words that can be typed using letters of alphabe ...