洛咕3312 [SDOI2014]数表


终于独立写出一道题了。。。真tm开心(还是先写完题解在写的)

先无视a的限制,设\(f[i]\)表示i的约数之和

不妨设\(n<m\)

\(Ans=\sum_{i=1}^n\sum_{j=1}^mf[\gcd(i,j)]\)

\(Ans=\sum_{x=1}^nf[x]\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)=x]\)

莫比乌斯反演,\(Ans=\sum_{x=1}^nf[x]\sum_{x|y}\mu(\frac{y}{x})\lfloor\frac{n}{y}\rfloor\lfloor\frac{m}{y}\rfloor\)

换个方法枚举,枚举\(\frac{y}{x}\)

\(Ans=\sum_{x=1}^nf[x]\sum_{y=1}^{n/x}\mu(y)\lfloor\frac{n}{xy}\rfloor\lfloor\frac{m}{xy}\rfloor\)

先枚举\(xy\),再枚举\(x\)

\(Ans=\sum_{x=1}^n\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{x}\rfloor\sum_{y|x}^nf[y]\mu(\frac{x}{y})\)

前面数论分块,后面预处理

现在有了a的限制,只要将询问按照a排序,树状数组维护前缀和,每次加入即可

#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
struct naive{unsigned int f,i;}s[100010];
il bool operator<(const naive&a,const naive&b){return a.f<b.f;}
struct ques{int n,m,a,i;}Q[100010];
il bool operator<(const ques&a,const ques&b){return a.a<b.a;}
unsigned int pri[100010],pr,mu[100010],f[100010],ans[100010];
bool yes[100010];
unsigned int t[100010];
il vd update(int x,unsigned int p){while(x<100001)t[x]+=p,x+=x&-x;}
il unsigned int query(int x){unsigned int ret=0;while(x)ret+=t[x],x-=x&-x;return ret;}
int main(){
mu[1]=1;
for(int i=2;i<100001;++i){
if(!yes[i])pri[++pr]=i,mu[i]=-1;
for(int j=1;j<=pr&&i*pri[j]<100001;++j){
yes[i*pri[j]]=1;
if(i%pri[j]==0){mu[i*pri[j]]=0;break;}
mu[i*pri[j]]=-mu[i];
}
}
for(int i=1;i<100001;++i)
for(int j=i;j<100001;j+=i)
f[j]+=i;
for(unsigned int i=1;i<100001;++i)s[i]=(naive){f[i],i};
std::sort(s+1,s+100001);
int q=gi(),n,m,a;
for(int i=1;i<=q;++i)n=gi(),m=gi(),a=gi(),Q[i]=(ques){n,m,a,i};
std::sort(Q+1,Q+q+1);
int p=1;
for(int i=1;i<=q;++i){
while(p<100001&&s[p].f<=Q[i].a){
for(int j=s[p].i;j<100001;j+=s[p].i)update(j,mu[j/s[p].i]*f[s[p].i]);
++p;
}
n=Q[i].n,m=Q[i].m;if(n>m)std::swap(n,m);
for(int l=1,r;l<=n;++l){
r=std::min(n/(n/l),m/(m/l));
ans[Q[i].i]+=(query(r)-query(l-1))*(n/l)*(m/l);
l=r;
}
}
for(int i=1;i<=q;++i)printf("%u\n",ans[i]&2147483647);
return 0;
}

洛咕3312 [SDOI2014]数表的更多相关文章

  1. 洛谷 P3312 [SDOI2014]数表 解题报告

    P3312 [SDOI2014]数表 题目描述 有一张\(N*M\)的数表,其第\(i\)行第\(j\)列(\(1\le i \le n\),\(1 \le j \le m\))的数值为能同时整除\( ...

  2. 洛谷P3312 - [SDOI2014]数表

    Portal Solution 共\(T(T\leq2\times10^4)\)组测试数据.给出\(n,m(n,m\leq10^5),a(a\leq10^9)\),求\[ \sum_{i=1}^n\s ...

  3. [bzoj3529] [洛谷P3312] [Sdoi2014] 数表

    Description 有一张n×m的数表,其第i行第j列(1 < =i < =n,1 < =j < =m)的数值为 能同时整除i和j的所有自然数之和.给定a,计算数表中不大于 ...

  4. Luogu 3312 [SDOI2014]数表

    在这一篇里把所有的套路写全方便自己之后复习. 首先是一个小学生数学:$a$整除$b$ $ = $  $\frac{b}{a}$ 也就是说这题中格子$(i, j)$的值就是既能被$i$整除又能被$j$整 ...

  5. 洛谷P3312 [SDOI2014]数表(莫比乌斯反演+树状数组)

    传送门 不考虑$a$的影响 设$f(i)$为$i$的约数和 $$ans=\sum\limits_{i=1}^n\sum\limits_{j=1}^nf(gcd(i,j))$$ $$=\sum\limi ...

  6. 洛谷 P3312 [SDOI2014]数表

    式子化出来是$\sum_{T=1}^m{\lfloor}\frac{n}{T}{\rfloor}{\lfloor}\frac{m}{T}{\rfloor}\sum_{k|T}\mu(\frac{T}{ ...

  7. BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]

    3529: [Sdoi2014]数表 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1399  Solved: 694[Submit][Status] ...

  8. 【BZOJ 3529】 [Sdoi2014]数表 (莫比乌斯+分块+离线+树状数组)

    3529: [Sdoi2014]数表 Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有 ...

  9. BZOJ 3259 [Sdoi2014]数表 (莫比乌斯反演 + 树状数组)

    3529: [Sdoi2014]数表 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2321  Solved: 1187[Submit][Status ...

随机推荐

  1. WOE和IV

    woe全称是"Weight of Evidence",即证据权重,是对原始自变量的一种编码形式. 进行WOE编码前,需要先把这个变量进行分组处理(离散化) 其中,pyi是这个组中响 ...

  2. ASP.NET Core 依赖注入最佳实践——提示与技巧

    在这篇文章,我将分享一些在ASP.NET Core程序中使用依赖注入的个人经验和建议.这些原则背后的动机如下: 高效地设计服务和它们的依赖. 预防多线程问题. 预防内存泄漏. 预防潜在的BUG. 这篇 ...

  3. MD5密码加密

    using System; using System.Security.Cryptography; using System.Text; namespace DimoNetwork.Common.DE ...

  4. chattr -lsattr 文件加锁解锁简单用法

    chattr: 加锁文件,无修改,无删除权限. 常用参数:        +a:  可给文件追加内容,但无法删除. +i  加锁文件(文件不能被删除.改名.设定链接关系,同时不能写入或追加内容) -i ...

  5. Django之基于iframe的ajax伪造

    IFRAME是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME).iframe元素会创建包含另外一个文档的内联框架 ajax的理念是不进行浏览器页面刷新的信息获取更新,也就是局部刷新. 那 ...

  6. JVM学习笔记-JVM模型

    JVM学习笔记 == 标签(空格分隔): jvm 学习笔记全部来自于<深入理解java虚拟机>总结 jvm内存示意图 虚拟机栈(Java Virtual Machine Stacks): ...

  7. Java集合和泛型

    集合 常用的集合有ArrayList,TreeSet,HashMap,HashSet. ArrayList 最常用的集合,每次插入都在后面追加元素. TreeSet 以有序状态保持并可防止重复.当你需 ...

  8. 百度地图POI数据爬取,突破百度地图API爬取数目“400条“的限制11。

    1.POI爬取方法说明 1.1AK申请 登录百度账号,在百度地图开发者平台的API控制台申请一个服务端的ak,主要用到的是Place API.检校方式可设置成IP白名单,IP直接设置成了0.0.0.0 ...

  9. [TJOI2013]拯救小矮人

    题目 首先有一个很假的贪心 我们定义一个人的需求为\(H-h_i-b_i\),就是这个人需要多少的高度在他下面他才能逃出去 我们趁剩余的高度还够,优先满足需求较高的 显然是错的,可能有一个人身高很高, ...

  10. luogu P2365 任务安排

    嘟嘟嘟 如果常规dp,\(dp[i][j]\)表示前\(i\)个任务分\(j\)组,得到 \[dp[i][j] = min _ {k = 0} ^ {i - 1} (dp[k][j - 1] + (s ...