bzoj 3853 : GCD Array
搬运题解
Claris:
1 n d v相当于给$a[x]+=v[\gcd(x,n)=d]$
$\begin{eqnarray*}&&v[\gcd(x,n)=d]\\&=&v[\gcd(\frac{x}{d},\frac{n}{d})=1]\\&=&v\sum_{k|\gcd(\frac{x}{d},\frac{n}{d})}\mu(k)\\&=&\sum_{k|\frac{n}{d},dk|x}v\mu(k)\end{eqnarray*}$
设 $a[i]=\sum_{j|i}f[j]$
则每次修改相当于枚举$k|\frac{n}{d}$,然后给$f[dk]+=v\mu(k)$
查询$x=\sum_{i=1}^x a[i]=\sum_{i=1}^x\sum_{d|i}f[d]=\sum_{d=1}^x f[d]\frac{x}{d}$
可以分块统计,用树状数组维护f[]的前缀和
大概维护一个数列
支持
1.对所有x的倍数的位置加上v
2.查询前缀和
可以用分块的方法把复杂度降为$n\sqrt{n}logn$
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
#define ll long long
#define pb(x) push_back(x)
#define N 200005
using namespace std;
int n,q;
int su[N],tot,pr[N],miu[N];
const int inf = 200000;
vector<int>v[N];
void shai()
{
miu[1]=1;
for(int i=1;i<=inf;i++)v[i].pb(1);
for(int i=2;i<=inf;i++)
{
if(!pr[i])
{
pr[i]=i;
su[++tot]=i;
miu[i]=-1;
}
for(int j=1;j<=tot&&su[j]*i<=inf;j++)
{
pr[su[j]*i]=su[j];
if(su[j]==pr[i])
{
break;
}
else miu[su[j]*i]=-miu[i];
}
for(int j=i;j<=inf;j+=i)v[j].pb(i);
}
return ;
}
ll c[N];
void add(int x,int z)
{
for(int i=x;i<=n;i+=(i&(-i)))
{
c[i]+=z;
}
return ;
}
ll qur(int x)
{
ll ans=0;
for(int i=x;i;i-=(i&(-i)))
{
ans+=c[i];
}
return ans;
}
int main()
{
shai();int cnt=0;
while(~scanf("%d%d",&n,&q))
{
if(!n&&!q)break;
printf("Case #%d:\n",++cnt);
for(int i=1;i<=n;i++)c[i]=0;
int t1,t2,t3,t4;
for(int i=1;i<=q;i++)
{
scanf("%d",&t1);
if(t1==1)
{
scanf("%d%d%d",&t2,&t3,&t4);
if(t2%t3!=0)continue;
int num=t2/t3;
for(int j=0;j<v[num].size();j++)
{
int k=v[num][j];
add(k*t3,miu[k]*t4);
}
}
else
{
scanf("%d",&t2);
ll ans=0;int r;
for(int l=1;l<=t2;l=r+1)
{
r=t2/(t2/l);
ans+=1LL*(t2/l)*(qur(r)-qur(l-1));
}
printf("%lld\n",ans);
} } }
return 0;
}
bzoj 3853 : GCD Array的更多相关文章
- HDU 4947 GCD Array 容斥原理+树状数组
GCD Array Time Limit: 11000/5500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- bzoj 2818 GCD 数论 欧拉函数
bzoj[2818]Gcd Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Samp ...
- BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4436 Solved: 1957[Submit][Status][Discuss ...
- BZOJ 2818: Gcd
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4443 Solved: 1960[Submit][Status][Discuss ...
- BZOJ3853 : GCD Array
1 n d v相当于给$a[x]+=v[\gcd(x,n)=d]$ \[\begin{eqnarray*}&&v[\gcd(x,n)=d]\\&=&v[\gcd(\fr ...
- bzoj 2818: Gcd GCD(a,b) = 素数
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1566 Solved: 691[Submit][Status] Descript ...
- bzoj 2818: Gcd 歐拉函數
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1633 Solved: 724[Submit][Status] Descript ...
- Bzoj 2818: Gcd 莫比乌斯,分块,欧拉函数,线性筛
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 3241 Solved: 1437[Submit][Status][Discuss ...
- BZOJ 2818 GCD(欧拉函数)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37161 题意:gcd(x, y) = 质数, 1 <= x, ...
随机推荐
- ats缓存规则
一. 用户访问过程:1. ats收到一个用户对web对象的请求;2. 使用该地址, ats尝试着在其对象数据库(缓存)中用被请求对象的地址来定位该对象;3. 如果对象在缓存中, ats会检查该对象是否 ...
- 高可用OpenStack(Queen版)集群-13.分布式存储Ceph
参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...
- git 创建管理多用户
<搬运> Windows下Git多账号配置,同一电脑多个ssh-key的管理 一台电脑上的git同时使用两个github账户 git之https或http方式设置记住用户名和密码的方法
- mysql 连接超时解决方案: 怎样修改默认超时时间
mysql数据库有一个wait_timeout的配置,默认值为28800(即8小时). 在默认配置不改变的情况下,如果连续8小时内都没有访问数据库的操作,再次访问mysql数据库的时候,mysql数据 ...
- "prefs:root" or "App-Prefs:root"
iOS 苹果审核也是看心情的吗?已经上线几个版本了,新版本提交审核居然被查出来了! Guideline 2.5.1 - Performance - Software Requirements Your ...
- JSBridge的原理
前言 参考来源 前人栽树,后台乘凉,本文参考了以下来源 github-WebViewJavascriptBridge JSBridge-Web与Native交互之iOS篇 Ios Android Hy ...
- js最简单的动画
$(document).ready(function(){ //�ֶ�����ҳ��Ԫ�� $("#reset").click(function(){ $("*" ...
- StringBuffer 与 StringBuilder类的使用
/*如果需要频繁修改字符串 的内容,建议使用字符串缓冲 类(StringBuffer). StringBuffer 其实就是一个存储字符 的容器. 笔试题目:使用Stringbuffer无 参的构造函 ...
- 调研Android的开发环境的发展演变
在 知道要做基于移动端的项目实践时,我就选定了Android,回来的时候查了很多相关的知识,很多人都在问开发安卓软件,使用eclipse还是用 Android studio?其实,也没有一个准确的答案 ...
- 用虚拟机安装了一台Linux系统,突然想克隆一台服务器,克隆后发现无法上网,如何解决?
用虚拟机安装了一台Linux系统,突然想克隆一台服务器,克隆后发现无法上网,如何解决? 答: a.编辑网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth ...