【BZOJ 3529】 [Sdoi2014]数表 (莫比乌斯+分块+离线+树状数组)
3529: [Sdoi2014]数表
Description
有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为
能同时整除i和j的所有自然数之和。给定a,计算数表中不大于a的数之和。Input
输入包含多组数据。
输入的第一行一个整数Q表示测试点内的数据组数,接下来Q行,每行三个整数n,m,a(|a| < =10^9)描述一组数据。Output
对每组数据,输出一行一个整数,表示答案模2^31的值。
Sample Input
2
4 4 3
10 10 5Sample Output
20
148

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
#define Maxn 100010
#define LL unsigned int
#define INF 0xfffffff
LL mx;
LL Mod; int mu[Maxn];
LL pri[Maxn],pl;
bool q[Maxn]; struct node
{
LL x,y,a,ans,id;
}t[Maxn],f[Maxn]; LL mymin(LL x,LL y) {return x<y?x:y;}
LL mymax(LL x,LL y) {return x>y?x:y;} bool cmp(node x,node y) {return x.a<y.a;}
bool cmp2(node x,node y) {return x.id<y.id;} void get_mu()
{
pl=;
memset(q,,sizeof(q));
mu[]=;
for(LL i=;i<=mx;i++)
{
if(q[i])
{
pri[++pl]=i;
mu[i]=-;
}
for(LL j=;j<=pl;j++)
{
if(i*pri[j]>mx) break;
q[i*pri[j]]=;
if(i%pri[j]==) mu[i*pri[j]]=;
else mu[i*pri[j]]=-mu[i];
if(i%pri[j]==) break;
}
}
for(LL i=;i<=mx;i++) f[i].a=;
for(LL i=;i<=mx;i++)
for(LL j=i;j<=mx;j+=i)
f[j].a=f[j].a+i;
for(LL i=;i<=mx;i++) f[i].id=i;
} LL c[Maxn],as[Maxn]; LL add(LL x,LL y)
{
as[x]+=y;
for(LL i=x;i<=mx;i+=i&(-i))
c[i]+=y;
} LL get_sum(LL x)
{
LL ans=;
for(LL i=x;i>=;i-=i&(-i))
ans+=c[i];
return ans;
} void change(LL x)
{
LL now=f[x].id;
for(LL i=now;i<=mx;i+=now)
add(i,(LL)(mu[i/now]*f[x].a));
} LL get_ans(LL n,LL m)
{
LL ans=,t;
if(n>m) t=n,n=m,m=t; LL sq=(LL)ceil(sqrt((double)m));
for(LL i=;i<=mymin(sq,n);i++)
{
LL x=(LL)(n/i),y=(LL)(m/i);
ans+=as[i]*(n/i)*(m/i);
} for(LL i=sq+;i<=n;)
{
LL x=n/i,y=m/i;
LL r1=n/x+,r2=m/y+;
if(r1>n+) r1=n+;
if(r2>n+) r2=n+;
LL r=mymin(r1,r2); ans+=(get_sum(r-)-get_sum(i-))*x*y;
i=r;
} return ans;
} int main()
{
Mod=;
for(LL i=;i<=;i++) Mod*=; LL T;
T=;
scanf("%d",&T); mx=; for(LL i=;i<=T;i++)
{
scanf("%d%d%d",&t[i].x,&t[i].y,&t[i].a);
mx=mymax(mx,mymin(t[i].x,t[i].y));
t[i].id=i;
}
sort(t+,t++T,cmp);
get_mu();
sort(f+,f++mx,cmp); memset(c,,sizeof(c));
memset(as,,sizeof(as));
LL now=;
for(LL i=;i<=T;i++)
{
while(f[now].a<=t[i].a&&now<=mx) change(now),now++;
t[i].ans=get_ans(t[i].x,t[i].y);
}
sort(t+,t++T,cmp2); for(LL i=;i<=T;i++)
{
printf("%d\n",(t[i].ans%Mod+Mod)%Mod);
}
return ;
}
[BZOJ 3529]
2016-09-03 10:57:57
【BZOJ 3529】 [Sdoi2014]数表 (莫比乌斯+分块+离线+树状数组)的更多相关文章
- 【bzoj3529】[Sdoi2014]数表 莫比乌斯反演+离线+树状数组
题目描述 有一张n×m的数表,其第i行第j列(1 <= i <= n ,1 <= j <= m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a的数之和. ...
- BZOJ3529: [Sdoi2014]数表 莫比乌斯反演_树状数组
Code: #include <cstdio> #include <algorithm> #include <cstring> #define ll long lo ...
- BZOJ 3529 [Sdoi2014]数表 (莫比乌斯反演+树状数组+离线)
题目大意:有一张$n*m$的数表,第$i$行第$j$列的数是同时能整除$i,j$的所有数之和,求数表内所有不大于A的数之和 先是看错题了...接着看对题了发现不会做了...刚了大半个下午无果 看了Po ...
- BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]
3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1399 Solved: 694[Submit][Status] ...
- BZOJ 3529 [Sdoi2014]数表 ——莫比乌斯反演 树状数组
$ans=\sum_{i=1}^n\sum_{j=1}^n\sigma(gcd(i,j))$ 枚举gcd为d的所有数得到 $ans=\sum_{d<=n}\sigma(d)*g(d)$ $g(d ...
- BZOJ 1878: [SDOI2009]HH的项链 离线树状数组
1878: [SDOI2009]HH的项链 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- 【BZOJ3529】数表(莫比乌斯反演,树状数组)
[BZOJ3529]数表(莫比乌斯反演,树状数组) 题解 首先不管\(A\)的范围的限制 要求的东西是 \[\sum_{i=1}^n\sum_{j=1}^m\sigma(gcd(i,j))\] 其中\ ...
- P1972 [SDOI2009]HH的项链[离线+树状数组/主席树/分块/模拟]
题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链 ...
- bzoj 2434: 阿狸的打字机 fail树+离线树状数组
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=2434 题解: 首先我们可以发现这个打字的过程本身就是在Trie上滚来滚去的过程 所以我们 ...
随机推荐
- 制作win7+ubuntu +winPE+CDlinux多系统启动U盘
制作前期准备工作 1.需要软件 grub4dos(http://sourceforge.net/projects/grub4dos/files/) UltraISO(http://cn.ezbsyst ...
- NChome如何创建单据跟主子表还有扩展开发要怎么弄?
单据表跟主子表笔记做在笔记本里面 扩展开发在网络备份里面
- 安卓获取Assets目录下的资源
获取Assets目录下的资源 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 ! ...
- Android ImageSwitcher和Gallery的使用
前几天,听说室友的老师要求他们做一个图片效果.其效果如下图所示(可左右滑动切换图片): 我当时晃眼一看,第一感觉好高级的样子.我还没做过这种效果呢,但室友说他们同学已经有人做出来了,我觉得既然有人做出 ...
- ISA2006 下建立VPN连接时出现“错误800”时的解决办法
[转载]http://social.microsoft.com/Forums/zh-CN/9cfa0c06-0f46-44cb-9e8f-8eba1c3821ba/vpn-vpn800 重启Routi ...
- 迭代map方法
Map<String, String> map=new HashMap<String,String>();map.put("1", "one&qu ...
- 使用hwclock同步RTC(硬件时钟)和OS Clock(操作系统时钟)
Linux下面有个命令叫做hwclock,其主要的功能是用来在RTC和操作系统之间进行时钟同步.既可以将RTC的时钟同步到操作系统,也可以在通过hwclock将当前系统时间.Internet时间.本地 ...
- 命令行下上传文件到iOS软件 专业文件管理/gplayer
U盘丢了, 就拿手机当U盘用用先. 一般情况下软件打开上传功能, 在浏览器里上传即可. 可是偏偏我的电影放在了 树莓派里面(搭建了一个SMB), 直接浏览器的话,会多占用些带宽, 我的破路由器.... ...
- 九度OJ 1201 二叉排序树
题目地址:http://ac.jobdu.com/problem.php?pid=1201 题目描述: 输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历. 输入: 输入第一行包括一个整数n( ...
- IOS 学习笔记 2015-04-15 Xcode 工程模板分类
一 Application类型 我们大部分呢的开发工作都是使用Application类型的模板创建IOS程序开始的,该类型包括5个模板1 Master-Detail-Application ...