bzoj千题计划205:bzoj3529: [Sdoi2014]数表
http://www.lydsy.com/JudgeOnline/problem.php?id=3529
有一张n*m的数表,其第i行第j列(1 < =i < =n,1 < =j < =m)的数值为能同时整除i和j的所有自然数之和。给定a,计算数表中不大于a的数之和。
20000 组询问 n<=1e5
f(k)表示 k 的 约数和
g(k)表示
f(k)的求法:
http://www.cnblogs.com/TheRoadToTheGold/p/8228969.html
g(k)的求法:
http://www.cnblogs.com/TheRoadToTheGold/p/6609495.html
假设没有a的限制
不妨令n<=m
即
令i*d=t,把后面两个下取整提到前面
令
则
预处理出F(t),除法分块便可以在O(sqrt(n))求解
但是现在有f(i)<=a 的限制
离线处理,读入所有的询问
所以把f(i)按f(i)的值从小到大排序
询问按a的值从小到大排序
用树状数组维护当前F(t)的值
在处理这个询问之前
找出所有<=本次询问a的f(i)
在树状数组中i及i的倍数位置加上f(i)
取模不用管,自然溢出即可
#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; #define N 100001
#define M 20001 typedef long long LL; int T; int miu[N]; int p[N];
bool vis[N]; struct nodef
{
int d,val;
}f[N];
int c[N]; bool cmpf(nodef A,nodef B)
{
if(A.val!=B.val) return A.val<B.val;
return A.d<B.d;
} struct Query
{
int id;
int n,m,a;
}Q[M]; bool cmpQ(Query A,Query B)
{
return A.a<B.a;
} int ans[M]; struct BIT
{
int s[N]; #define lowbit(x) x&-x void add(int x,int val)
{
while(x<N-)
{
s[x]=s[x]+val;
x+=lowbit(x);
}
} int query(int x)
{
int sum=;
while(x)
{
sum=sum+s[x];
x-=lowbit(x);
}
return sum;
} }Bit; void read(int &x)
{
x=; int f=; char c=getchar();
while(!isdigit(c)) { if(c=='-') f=-; c=getchar(); }
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
x*=f;
} void pref()
{
int cnt=;
miu[]=;
f[].d=;
f[].val=;
for(int i=;i<N;++i)
{
f[i].d=i;
if(!vis[i])
{
p[++cnt]=i;
miu[i]=-;
f[i].val=i+;
c[i]=;
}
for(int j=;j<=cnt;++j)
{
if(i*p[j]>=N) break;
vis[i*p[j]]=true;
if(i%p[j]==)
{
f[i*p[j]].val=f[i].val*p[j]+c[i];
c[i*p[j]]=c[i];
break;
}
miu[i*p[j]]=-miu[i];
f[i*p[j]].val=f[i].val*(p[j]+);
c[i*p[j]]=f[i].val;
}
}
sort(f+,f+N,cmpf);
} void init()
{
read(T);
for(int i=;i<=T;++i)
{
read(Q[i].n);
read(Q[i].m);
read(Q[i].a);
Q[i].id=i;
}
sort(Q+,Q+T+,cmpQ);
} void solve()
{
int nowQ=;
while(Q[nowQ].a<=) nowQ++;
int nowd=;
int j,res;
int tot,lastsum,nowsum;
for(;nowQ<=T;++nowQ)
{
while(nowd<N && f[nowd].val<=Q[nowQ].a)
{
for(int i=f[nowd].d;i<N;i+=f[nowd].d)
Bit.add(i,f[nowd].val*miu[i/f[nowd].d]);
nowd++;
}
if(Q[nowQ].n>Q[nowQ].m) swap(Q[nowQ].n,Q[nowQ].m);
tot=lastsum=;
for(int i=;i<=Q[nowQ].n;i=j+)
{
j=min(Q[nowQ].n/(Q[nowQ].n/i),Q[nowQ].m/(Q[nowQ].m/i));
nowsum=Bit.query(j);
res=nowsum-lastsum;
res=res*(Q[nowQ].n/i)*(Q[nowQ].m/i);
tot+=res;
lastsum=nowsum;
}
tot+= tot< ? 1LL<< : ;
ans[Q[nowQ].id]=tot;
}
for(int i=;i<=T;++i) cout<<ans[i]<<'\n';
} int main()
{
pref();
init();
solve();
}
bzoj千题计划205:bzoj3529: [Sdoi2014]数表的更多相关文章
- bzoj千题计划205:bzoj1966: [Ahoi2005]VIRUS 病毒检测
http://www.lydsy.com/JudgeOnline/problem.php?id=1966 f[i][j] 表示s的前i个和t的前j个是否匹配 转移看代码 注意初始化: f[0][0]= ...
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- bzoj千题计划141:bzoj3532: [Sdoi2014]Lis
http://www.lydsy.com/JudgeOnline/problem.php?id=3532 如果没有字典序的限制,那么DP拆点最小割即可 加上字典序的限制: 按c从小到大枚举最小割边集中 ...
- bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...
- bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪
http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...
- bzoj千题计划177:bzoj1858: [Scoi2010]序列操作
http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...
- bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)
https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...
- bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)
https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...
- bzoj千题计划292:bzoj2244: [SDOI2011]拦截导弹
http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len ...
随机推荐
- effective c++ 笔记 (1-3)
// // effective c++.cpp // 笔记 // // Created by fam on 15/3/23. // // //-------------------------- ...
- flask_admin 笔记四 自定义视图
定义自己的视图 对于您的要求非常具体的情况,您很难用内置的ModelView类来满足这些需求,Flask-Admin使您可以轻松地完全控制并将自己的视图添加到界面中. 1)独立视图 可以通过扩展Bas ...
- 【Android UI设计与开发】第01期:引导界面(一)ViewPager介绍和使用详解
做Android开发加起来差不多也有一年多的时间了,总是想写点自己在开发中的心得体会与大家一起交流分享.共同进步,刚开始写也不知该如何下手,仔细想了一下,既然是刚开始写,那就从一个软件给人最直观的感受 ...
- OD之破解密钥文件授权(三)
除了上次的序列号验证以外,还有这种密钥授权模式,需要密钥文件授权才能打开文件; 老办法,先拖进OD中动态分析再说: 然后F8进行调试这时候发现了一个条件跳转函数jnz下面是说跳转未实现,那我们发现上面 ...
- 【Alpha】第六次Scrum meeting
今日任务一览: 姓名 今日完成任务 所耗时间 刘乾 今日完成了python的一个template引擎airspeed的使用,并使用该引擎成功跑出一份latex模板替换文件. Issue链接:https ...
- beta2
组员1:吴晓晖(组长) 过去两天完成了哪些任务 代码重构基本完成 展示GitHub当日代码/文档签入记录 接下来的计划 推荐算法 还剩下哪些任务 组员2:陈锦谋 过去两天完成了哪些任务 重新制作图标 ...
- vm15安装esxi6.0
vmware 15安装esxi6.0时发现出现没有硬盘选择,导致无法安装 在vm12上安装正常 经过测试 1.需要在虚拟机硬件兼容性上选择12.x 2.版本也要选6.0,不要选6.X 其次,esxi要 ...
- Linux kernel 发布 5.0-rc1 版本
Linux kernel 要发布 5.0 了.. 跟原因是 linus 认为 4.21的小版本号太多了... 邮件内容如下: https://lore.kernel.org/lkml/20190107 ...
- [转帖]Portainer -- Docker可视化管理工具的安装配置及使用
原贴地址:https://blog.csdn.net/A632189007/article/details/78779920 Portainer介绍 Portainer是Docker的图形化管理工具, ...
- 深入理解学习Git工作流(git-workflow-tutorial)
转载:https://segmentfault.com/a/1190000002918123#articleHeader11 人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协 ...