洛谷 P3312 [SDOI2014]数表
式子化出来是$\sum_{T=1}^m{\lfloor}\frac{n}{T}{\rfloor}{\lfloor}\frac{m}{T}{\rfloor}\sum_{k|T}\mu(\frac{T}{k})[\sigma(k)<=a]\sigma(k)$
如果没有a的限制的话,显然只要把后面那个sigma预处理出来
有了a的限制呢?考虑把询问按a从小到大排序,然后每次把所有满足$lasta<\sigma(k)<=nowa$(lasta指上个询问的a,nowa指当前询问的a)的加入后面那部分的贡献(开始时对于每个T预处理有哪些k满足$\sigma(k)=T$,这里就暴力枚举k使得$\sigma(k)$=当前要加入贡献的值,再暴力枚举k的倍数更新);用树状数组维护前缀和;复杂度是n*log^2+T*sqrt*log
错误记录:
1.121行<=n写成<=m;导致除以0;本地测试的时候只用了n=m的数据,所以没测出来
2.108行没规定这个<=500000
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const ll N=;
const ll M=;
struct Q
{
ll n,m,a,num;
}q[M+];
ll qq;
ll ans[M+];
ll mu[N+],len,prime[N+];
ll f1[N+],f2[N+],h[N+];
//分别为最小质因子的p^k,1+p^0+p^1+..+p^k,函数值
vector<int> dd[];
bool nprime[N+];
bool c1(const Q &a,const Q &b) {return a.a<b.a;}
const ll md=1LL<<;
#define lowbit(x) ((x)&(-x))
ll d[N+];
void add(ll p,ll x)
{
for(;p<=N;p+=lowbit(p)) d[p]+=x;
}
ll sum(ll p)
{
ll ans=;
for(;p>;p-=lowbit(p)) ans+=d[p];
return ans;
}
//ll Mod(ll a,ll b)
//{
// if(a>=0) return a%b;
// else if(a%b==0) return 0;
// else return b+a%b;
//}
int main()
{
ll i,j,k,n,m,an;
mu[]=;h[]=;
for(i=;i<=N;i++)
{
if(!nprime[i])
{
prime[++len]=i;mu[i]=-;
f1[i]=i;f2[i]=i+;h[i]=i+;
}
for(j=;j<=len&&i*prime[j]<=N;j++)
{
nprime[i*prime[j]]=;
if(i%prime[j]==)
{
mu[i*prime[j]]=;
f1[i*prime[j]]=f1[i]*prime[j];
f2[i*prime[j]]=f2[i]+f1[i*prime[j]];
h[i*prime[j]]=h[i]/f2[i]*f2[i*prime[j]];
break;
}
else
{
mu[i*prime[j]]=-mu[i];
f1[i*prime[j]]=prime[j];
f2[i*prime[j]]=+prime[j];
h[i*prime[j]]=h[i]*f2[i*prime[j]];
}
}
}
for(i=;i<=N;i++)
dd[h[i]].pb(i);
/*
ll ttt=0;
for(i=1;i<=20000;i++) ttt=max(ttt,h[i]);
printf("%lld",ttt);
{
ll a,n,m,k;
while(1)
{
scanf("%lld%lld%lld",&n,&m,&a);
if(n>m) swap(n,m);
ll ans=0;
for(ll T=1;T<=m;T++)
{
ll a1=0;
for(k=1;k<=T;k++)
if(T%k==0)
{
a1+=mu[T/k]*(h[k]<=a)*h[k];
}
ans+=(n/T)*(m/T)*a1;
}
printf("%lld\n",ans);
}
}*/
scanf("%lld",&qq);
for(i=;i<=qq;i++) scanf("%lld%lld%lld",&q[i].n,&q[i].m,&q[i].a),q[i].num=i;
sort(q+,q+qq+,c1);
for(i=,j=;i<=qq;i++)
{
while(j+<=q[i].a&&j+<=)
{
j++;
for(auto d:dd[j])
{
for(k=d;k<=N;k+=d)
{
add(k,mu[k/d]*j);
}
}
}
if(q[i].n>q[i].m) swap(q[i].n,q[i].m);
n=q[i].n;m=q[i].m;an=;
for(ll i=,j;i<=n;i=j+)
{
j=min(n/(n/i),m/(m/i));
an+=(n/i)*(m/i)*(sum(j)-sum(i-));
}
ans[q[i].num]=an;
//printf("a%lld\n",an);
}
for(i=;i<=qq;i++) printf("%lld\n",ans[i]%md);
return ;
}
洛谷 P3312 [SDOI2014]数表的更多相关文章
- 洛谷 P3312 [SDOI2014]数表 解题报告
P3312 [SDOI2014]数表 题目描述 有一张\(N*M\)的数表,其第\(i\)行第\(j\)列(\(1\le i \le n\),\(1 \le j \le m\))的数值为能同时整除\( ...
- 洛谷P3312 - [SDOI2014]数表
Portal Solution 共\(T(T\leq2\times10^4)\)组测试数据.给出\(n,m(n,m\leq10^5),a(a\leq10^9)\),求\[ \sum_{i=1}^n\s ...
- [bzoj3529] [洛谷P3312] [Sdoi2014] 数表
Description 有一张n×m的数表,其第i行第j列(1 < =i < =n,1 < =j < =m)的数值为 能同时整除i和j的所有自然数之和.给定a,计算数表中不大于 ...
- 洛谷P3312 [SDOI2014]数表(莫比乌斯反演+树状数组)
传送门 不考虑$a$的影响 设$f(i)$为$i$的约数和 $$ans=\sum\limits_{i=1}^n\sum\limits_{j=1}^nf(gcd(i,j))$$ $$=\sum\limi ...
- 洛咕3312 [SDOI2014]数表
洛咕3312 [SDOI2014]数表 终于独立写出一道题了...真tm开心(还是先写完题解在写的) 先无视a的限制,设\(f[i]\)表示i的约数之和 不妨设\(n<m\) \(Ans=\su ...
- P3312 [SDOI2014]数表
啊啊啊我昨天怎么没写题解wwww 补昨日题解... 题目链接 : https://www.luogu.org/problemnew/show/P3312 也是莫反 我要把fft留到今天写 [和zyn小 ...
- 洛谷 P3313 [SDOI2014]旅行 解题报告
P3313 [SDOI2014]旅行 题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教 ...
- luogu P3312 [SDOI2014]数表
传送门 我们看要求的东西\[\sum_{i=1}^{n}\sum_{j=1}^{m}[\sigma(gcd(i,j))\le a]\sigma(gcd(i,j))\] 然而\(\le a\)比较烦,可 ...
- 洛谷P3317 [SDOI2014]重建 [Matrix-Tree定理]
传送门 思路 相信很多人像我一样想直接搞Matrix-Tree定理,而且还过了样例,然后交上去一分没有. 但不管怎样这还是对我们的思路有一定启发的. 用Matrix-Tree定理搞,求出的答案是 \[ ...
随机推荐
- Direct3D 9 入门样例程序 圆锥体
介绍 Directx3D 9 什么是DirectX,非常好说了,Win32 C++ API.主要是多媒体编程方面的,长处体如今高性能了,如今我知道的版本号最高是D3D11,可是我是学习入门的,从D3D ...
- 基于node+koa2+mongodb实现简单的导航管理系统
基于node+koa2+mongodb实现简单的导航管理系统 项目说明 本项目gitbub地址 https://github.com/xuess/nav-admin,喜欢请star 基于node 实现 ...
- LeetCode 226 Invert Binary Tree(转换二叉树)
翻译 将下图中上面的二叉树转换为以下的形式.详细为每一个左孩子节点和右孩子节点互换位置. 原文 如上图 分析 每次关于树的题目出错都在于边界条件上--所以这次细致多想了一遍: void swapNod ...
- PCH in Xcode 6
本文转载至 http://blog.csdn.net/wbdwsqwwn/article/details/40476151 新建文件 ⌘+N 选择 iOS/Mac -> Other -> ...
- 在Android Studio中修改应用包名
紧凑模式下(包名中的每个字段紧贴在一起,例如),右键单击包名,Refactor -> Rename,只能修改包名最外层的字段 分离模式下(点击设置,将Hide Empty Middle Pack ...
- [原创] Karen and Supermarket 2
在回家的路上,凯伦决定到超市停下来买一些杂货. 她需要买很多东西,但因为她是学生,所以她的预算仍然很有限. 事实上,她只花了b美元. 超市出售N种商品.第i件商品可以以ci美元的价格购买.当然,每件商 ...
- js 时间戳精确值的问题
最近做一个多图上传的功能,通过name + 时间戳命名,结果发现时间戳竟然一样,一直以为是代码逻辑的问题,结果出错在时间戳的获取上了. 关于时间戳的获取方式: 1.Date.parse() var d ...
- springboot在eclipse实现热部署
eclipse使用spring-tool-suite插件创建springboot项目,项目创建完成后. 选中项目,右键 Spring Tools --> Add Boot Devtools 点 ...
- 目前最新版本ActiveMQ 5.15.3 和JDK版本有关的问题
java.lang.UnsupportedClassVersionError: org/apache/activemq/ActiveMQConnectionFactory : Unsupported ...
- HDU - 1874 畅通工程续(最短路径)
d.已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离. s.最短路径 c.Dijkstra单源最短路 /* Dijkstra单源最短路 权值必须是非负 单源最短路径,Dijkstra算法 ...