洛咕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. Python+Selenium笔记(十四)鼠标与键盘事件

     (一) 前言 Webdriver高级应用的API,允许我们模拟简单到复杂的键盘和鼠标事件,如拖拽操作.快捷键组合.长按以及鼠标右键操作,都是通过使用webdriver的Python API 中的Ac ...

  2. CSS样式----CSS样式表的继承性和层叠性(图文详解)

    本文最初于2017-07-29发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 本文重点 CSS的继承性 CSS的层叠性 计算权重 ...

  3. SQL Server自动备份 备份到本地或者远程服务器

    0.1 在SQLServer2008 --> 备份数据库 --> 安全 --> 新建用户 --> 用户名 选择该windows用户 (确保 --> 机器名/人名 --&g ...

  4. 小慢歌之基于RHEL8/CentOS8的网络IP配置详解

    ➡ 在rhel8(含centos8)上,没有传统的network.service,在/etc/sysconfig/network-scripts/里也看不到任何脚本文件,那么该如何进行网络配置呢. ➡ ...

  5. 美式九球比赛规则 (Nine-ball)

    九球比赛规则 (Nine-ball) 九球比赛规则 一.器材: 1.台面规格: a.内沿长254厘米. b.内沿宽127厘米. c.高80厘米. d.角袋口内沿最近距离为10.5厘米(±1毫米),腰袋 ...

  6. You have new mail in /var/spool/mail/root 解决烦琐提示的方法

    今天写定时任务时,出现奇怪的提示,有的时候每敲一下回车,也出现奇怪的提示 You have new mail in /var/spool/mail/root 阿西吧........表示很烦...究竟是 ...

  7. [转]搭建Keepalived+Nginx+Tomcat高可用负载均衡架构

    [原文]https://www.toutiao.com/i6591714650205716996/ 一.概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最 ...

  8. October 21st 2017 Week 42nd Saturday

    Only I can change my life. No one can do it for me. 只有我可以改变我的命运,没有人可以帮我做. Stop complaining about the ...

  9. October 11th 2017 Week 41st Wednesday

    If you don't know where you are going, you might not get there. 如果你不知道自己要去哪里,你可能永远到不了那里. The reward ...

  10. [LOJ 6029]「雅礼集训 2017 Day1」市场

    [LOJ 6029] 「雅礼集训 2017 Day1」市场 题意 给定一个长度为 \(n\) 的数列(从 \(0\) 开始标号), 要求执行 \(q\) 次操作, 每次操作为如下四种操作之一: 1 l ...