【[SDOI2014]数表】
求
\]
\(σ\)表示约数和函数
感觉非常难求的样子
先把套路搞出来
\]
\]
我们要求的是
\]
可以把\(d\)放到前面来枚举
\]
我们发现后面就是\(σ\times \mu\)
非常显然
\]
两边卷上\(\mu\)
\]
所以如果只是求上面那个柿子甚至线筛都不用
但是有一个限制
\]
我们得好好考虑一下了
首先由于是多组询问,我们可以直接离线掉,按照每组询问的\(a\)从小到大排序
之后把所有的数按照\(σ\)来排序
每次把所有的\(σ<=a\)的数加入进去,显然这个数加进去的时候会影响其所有倍数,同时我们整除分块的时候需要前缀和,于是这里用一个树状数组维护
之后就很好做了
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#define re register
#define maxn 100005
#define uint long long
#define LL long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define lowbit(x) ((x)&(-x))
const LL mod=1ll<<31;
inline int read()
{
char c=getchar();
int x=0;
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();
return x;
}
struct ASK
{
int n,m,rk,A;
uint ans;
}a[20005];
inline int cmp(ASK A,ASK B)
{
return A.A<B.A;
}
int mu[maxn],f[maxn],p[maxn>>1],pre[maxn],d[maxn];
int T,N;
struct Node
{
int num,p;
}b[maxn];
uint c[maxn];
uint Ans[maxn];
inline void add(int x,uint val){for(re int i=x;i<=N;i+=lowbit(i)) c[i]=(c[i]+val)%mod;}
inline uint ask(int x){uint cnt=0;for(re int i=x;i;i-=lowbit(i)) cnt=(cnt+c[i])%mod;return cnt;}
inline int cop(Node A,Node B)
{
return A.num<B.num;
}
void write(uint x)
{
if(x>9) write(x/10);
putchar(x%10+48);
}
int main()
{
T=read();
for(re int i=1;i<=T;i++) a[i].n=read(),a[i].m=read(),a[i].rk=i,scanf("%d",&a[i].A);
for(re int i=1;i<=T;i++) if(a[i].n>a[i].m) std::swap(a[i].n,a[i].m);
for(re int i=1;i<=T;i++) N=max(N,a[i].m);
std::sort(a+1,a+T+1,cmp);
f[1]=1,mu[1]=1;
for(re int i=2;i<=N;i++)
{
if(!f[i]) p[++p[0]]=i,mu[i]=-1;
for(re int j=1;j<=p[0]&&p[j]*i<=N;j++)
{
f[p[j]*i]=1;
if(i%p[j]==0) break;
mu[p[j]*i]=-1*mu[i];
}
}
for(re int i=1;i<=N;i++)
for(re int j=1;j*i<=N;j++) d[i*j]+=i;
for(re int i=1;i<=N;i++) b[i].p=i,b[i].num=d[i];
std::sort(b+1,b+N+1,cop);
int now=1;
for(re int i=1;i<=T;i++)
{
while(now<=N&&b[now].num<=a[i].A)
{
for(re int j=1;j*b[now].p<=N;j++) add(b[now].p*j,((b[now].num*mu[j])%mod+mod)%mod);
now++;
}
for(re uint l=1,r;l<=a[i].n;l=r+1)
{
r=min(a[i].n/(a[i].n/l),a[i].m/(a[i].m/l));
a[i].ans+=(uint)(a[i].n/l)%mod*(uint)(a[i].m/l)%mod*(ask(r)-ask(l-1)+mod)%mod;
a[i].ans%=mod;
}
Ans[a[i].rk]=a[i].ans;
}
for(re int i=1;i<=T;i++) write(Ans[i]),putchar(10);
return 0;
}
【[SDOI2014]数表】的更多相关文章
- BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]
3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1399 Solved: 694[Submit][Status] ...
- 【BZOJ 3529】 [Sdoi2014]数表 (莫比乌斯+分块+离线+树状数组)
3529: [Sdoi2014]数表 Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有 ...
- BZOJ 3259 [Sdoi2014]数表 (莫比乌斯反演 + 树状数组)
3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2321 Solved: 1187[Submit][Status ...
- 洛咕3312 [SDOI2014]数表
洛咕3312 [SDOI2014]数表 终于独立写出一道题了...真tm开心(还是先写完题解在写的) 先无视a的限制,设\(f[i]\)表示i的约数之和 不妨设\(n<m\) \(Ans=\su ...
- 【BZOJ3529】[Sdoi2014]数表 莫比乌斯反演+树状数组
[BZOJ3529][Sdoi2014]数表 Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和 ...
- 洛谷 P3312 [SDOI2014]数表 解题报告
P3312 [SDOI2014]数表 题目描述 有一张\(N*M\)的数表,其第\(i\)行第\(j\)列(\(1\le i \le n\),\(1 \le j \le m\))的数值为能同时整除\( ...
- BZOJ3529 [Sdoi2014]数表 【莫比乌斯反演】
3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2151 Solved: 1080 [Submit][Status ...
- BZOJ[Sdoi2014]数表 莫比乌斯反演
[Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2383 Solved: 1229[Submit][Status][Disc ...
- 洛谷P3312 - [SDOI2014]数表
Portal Solution 共\(T(T\leq2\times10^4)\)组测试数据.给出\(n,m(n,m\leq10^5),a(a\leq10^9)\),求\[ \sum_{i=1}^n\s ...
- bzoj [SDOI2014]数表 莫比乌斯反演 BIT
bzoj [SDOI2014]数表 莫比乌斯反演 BIT 链接 bzoj luogu loj 思路 \[ \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}a*[f[ ...
随机推荐
- 面向对象(基础oop)之属性与构造函数
大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开 ...
- iOS开发笔记18:一些编译、开发调试、打包的细节整理
1.以链库的方式引用第三方库 一些特殊场景可能会要求使用链库的方式使用第三方库,大体设置如下: ①Other Linker Flags里进行设置,格式为-l+库名称 ②Libray Search Pa ...
- springboot之内嵌tomcat修改端口号
第一种: 在配置文件中直接修改 server.port=8089 第二种: 直接定义 TomcatEmbeddedServletContainerFactory,注册bean: @Configurat ...
- K:找寻数组中第n大的数组元素的三个算法
相关介绍: 给定一个数组,找出该数组中第n大的元素的值.其中,1<=n<=length.例如,给定一个数组A={2,3,6,5,7,9,8,1,4},当n=1时,返回9.解决该问题的算法 ...
- C# 后台处理图片的几种方式
第一种: 将上传图片直接保存到本地 var supportedTypes = new[] { "jpg", "jpeg", "png", & ...
- UOJ450. 【集训队作业2018】复读机
传送门 \(d=1\) 输出 \(k^n\) \(d=2\),构造生成函数,就是求 \[(\sum_{i=0}^{\infty}[2|i]\frac{x^i}{i!})^k[x^n]=(\frac{e ...
- Sql语句常用关键字
--语 句 功 能--数据操作SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库表中删除数据行UPDATE --更新数据库表中的数据 --数 ...
- Web开发须知的浏览器内幕 缓存与存储篇(2)
本文禁止转载,由UC浏览器内部出品. 3. HTTP Cache 综述 HTTP Cache是完全按照IETF规范实现的,最新的RFC规范地址是 https://tools.ietf.org/html ...
- LintCode2016年8月22日算法比赛----克隆二叉树
克隆二叉树 题目描述 深度复制一个二叉树. 给定一个二叉树,返回一个它的克隆品. 样例 给定一个二叉树: 1 / \ 2 3 / \ 4 5 返回其相同结构相同数值的克隆二叉树: 1 / \ 2 3 ...
- 关于App的cpu/内存/流量 /电量的方法(GT工具)
https://mp.weixin.qq.com/s?__biz=MzUzNTQxMzMzMg==&mid=2247484376&idx=1&sn=651e9cf22801b5 ...