bzoj 3529: [Sdoi2014]数表
#include<cstdio>
#include<iostream>
#include<algorithm>
#define M 200009
//#define N 100000
using namespace std;
struct data
{
int x,y,a1,yy;
}a[M];
struct dat
{
int F,id;
}b[M];
int n,mo[M],zhan[M],tnt,sum[M],st=,ans[M],N;
bool mark[M];
bool cmp(data b1,data b2)
{
return b1.a1<b2.a1;
}
bool cmp1(dat b1,dat b2)
{
return b1.F<b2.F;
}
void jia(int a1,int a2)
{
for(;a1<=N;a1+=a1&-a1)
sum[a1]+=a2;
return;
}
void mobiwus()
{
mo[]=;
for(int i=;i<=N;i++)
{
if(!mark[i])
{
zhan[++tnt]=i;
mo[i]=-;
}
for(int j=;i*zhan[j]<=N&&j<=tnt;j++)
{
mark[i*zhan[j]]=;
if(i%zhan[j])
mo[i*zhan[j]]=mo[i]*mo[zhan[j]];
else
mo[i*zhan[j]]=;
}
}
return;
}
int query(int a1)
{
int ss=;
for(;a1;a1-=a1&-a1)
ss+=sum[a1];
return ss;
}
void su(int n,int m,int j)
{
if(n>m)
swap(n,m);
int last=,re=;
for(int i=;i<=n;i=last+)
{
last=min(n/(n/i),m/(m/i));
re+=(n/i)*(m/i)*(query(last)-query(i-));
}
ans[j]=re;
return;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].a1);
a[i].yy=i;
N=max(N,a[i].x);
N=max(N,a[i].y);
}
sort(a+,a+n+,cmp);
mobiwus();
for(int i=;i<=N;i++)
{
b[i].F=;
b[i].id=i;
}
for(int i=;i<=N;i++)
for(int j=;j*i<=N;j++)
b[i*j].F+=i;
sort(b+,b+N+,cmp1);
for(int i=;i<=n;i++)
{
for(;b[st].F<=a[i].a1&&st<=N;st++)
for(int j=;j*b[st].id<=N;j++)
jia(j*b[st].id,b[st].F*mo[j]);
su(a[i].x,a[i].y,a[i].yy);
}
for(int i=;i<=n;i++)
printf("%d\n",ans[i]&0x7fffffff);
return ;
}
莫比乌斯反演
bzoj 3529: [Sdoi2014]数表的更多相关文章
- 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的所有约数的和,就是要求: ...
- 【刷题】BZOJ 3529 [Sdoi2014]数表
Description 有一张n×m的数表,其第i行第j列(1<=i<=n,1<=j<=m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a的数之和. In ...
- BZOJ 3529 [Sdoi2014]数表 (莫比乌斯反演+树状数组+离线)
题目大意:有一张$n*m$的数表,第$i$行第$j$列的数是同时能整除$i,j$的所有数之和,求数表内所有不大于A的数之和 先是看错题了...接着看对题了发现不会做了...刚了大半个下午无果 看了Po ...
- 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 3259 [Sdoi2014]数表 (莫比乌斯反演 + 树状数组)
3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2321 Solved: 1187[Submit][Status ...
- 3529: [Sdoi2014]数表 - BZOJ
Description 有一张N×m的数表,其第i行第j列(1 < =i < =n,1 < =j < =m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a ...
- 【BZOJ】3529: [Sdoi2014]数表
题意:求 $$\sum_{i=1}^{n} \sum_{j=1}^{m} \sum_{d|(i, j)} d 且 (\sum_{d|(i, j)} d)<=a$$ n, m<=1e5,q次 ...
随机推荐
- 简单介绍一下R中的几种统计分布及常用模型
统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...
- python实用小技巧自问自答系列(一):查看类中函数文档doc的方法
问题:如何查看某个类的方法文档说明或者是函数的参数列表情况? 答: 方法一:直接在需要查询的方法后面加上".__doc__"即可以打印出该方法的文档说明(需要先导入该方法所属模块) ...
- 【BZOJ】3436: 小K的农场
3436: 小K的农场 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 938 Solved: 417[Submit][Status][Discuss ...
- 有关uploadifive的使用经验
这段时间做了一个项目用到uploadifive上传控件,和uploadify不同,这个控件是基于HTML5的版本而不用支持falsh,因而移动端也可以使用. 整理用过的相关属性与方法: 属性 作用 a ...
- HTML基础(3)
1.块元素和内嵌元素(block\inline) 块的特征: 独占一行 不设定宽度,宽度将撑满整行 能设置所有样式 内嵌的特征: 默认同行可以继续跟同类型标签 内容撑开宽度 不支持宽高 不支持上下的m ...
- log4j PatternLayout 输出解析
以下是PatternLayout.class源码的文档介绍: A flexible layout configurable with pattern string. This code is know ...
- /etc/ethers【地址映射】
该文件存放硬件地址和 IP 地址的映射关系. 格式如下: 00-00-00-00-00-00 0:0:0:0 每一行代表一个 IP 地址.
- java中异常抛出后代码是否会继续执行
为了回答这个问题,我编写了几段代码测试了一下,结果如下: 代码1:throw new Exception("参数越界"); System.out.println(" ...
- contiki-process_run()
process_run()函数位于main函数中 ) { do { } ); idle_count++; } 找到函数的声明处: /** * Run the system once - call po ...
- poll()函数的使用
分类: LINUX poll函数用于监测多个等待事件,若事件未发生,进程睡眠,放弃CPU控制权,若监测的任何一个事件发生,poll将唤醒睡眠的进程,并判断是什么等待事件发生,执行相应的操作.poll函 ...