搬运题解
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的更多相关文章

  1. HDU 4947 GCD Array 容斥原理+树状数组

    GCD Array Time Limit: 11000/5500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  2. bzoj 2818 GCD 数论 欧拉函数

    bzoj[2818]Gcd Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Samp ...

  3. BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss ...

  4. BZOJ 2818: Gcd

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4443  Solved: 1960[Submit][Status][Discuss ...

  5. BZOJ3853 : GCD Array

    1 n d v相当于给$a[x]+=v[\gcd(x,n)=d]$ \[\begin{eqnarray*}&&v[\gcd(x,n)=d]\\&=&v[\gcd(\fr ...

  6. bzoj 2818: Gcd GCD(a,b) = 素数

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1566  Solved: 691[Submit][Status] Descript ...

  7. bzoj 2818: Gcd 歐拉函數

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1633  Solved: 724[Submit][Status] Descript ...

  8. Bzoj 2818: Gcd 莫比乌斯,分块,欧拉函数,线性筛

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 3241  Solved: 1437[Submit][Status][Discuss ...

  9. BZOJ 2818 GCD(欧拉函数)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37161 题意:gcd(x, y) = 质数, 1 <= x, ...

随机推荐

  1. nodejs加载模块心得,mongoose的继承,schematype的mixd介绍

    1. require("xxx")可以是原生模块, 也可以是根目录“/node_modules”下的某个模块 2. 多个模块的package.json使用同一个相同模块的时候,将改 ...

  2. ubuntu下修改nginx的进程数

    1. 进入nginx配置文件:vim /etc/nginx/nginx.conf2. 将events下的worker_processes 修改为 你希望的数字,保存文件并退出3. 重启nginx: s ...

  3. html , body , margin , overflow 之大乱战

    <!DOCTYPE html> <html> <head> <style> html,body{ margin:0 ;padding:0 } div{m ...

  4. route命令详情

    基础命令学习目录首页 原文链接:https://www.cnblogs.com/lpfuture/p/5857738.html 考试题一:linux下如何添加路由(百度面试题) 以上是原题,老男孩老师 ...

  5. 互评Beta版本——二次元梦之队——“I Do”

    基于NABCD评论作品,及改进建议 1.根据(不限于)NABCD评论作品的选题 (1)N(Need,需求) 这是一款可以教学新手入门编程的软件,不断的通关让他们慢慢学会编程,可以让没有接触过编程的人了 ...

  6. 第35次Scrum会议(11/23)【欢迎来怼】

    一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文小组照片 二.开会信息 时间:2017/11/23 17:03~17:24,总计21min.地点:东北师 ...

  7. 互评Beta版本(Hello World!——SkyHunter)

    1 基于NABCD评论作品,及改进建议 SkyHunter这款游戏我很喜欢,小时候总玩飞机类的游戏,这款游戏我上课的时候试玩了,在我电脑上运行是很好玩的,音乐震撼,画面玄幻,富有金属音乐的味道,游戏内 ...

  8. HDU 2262 Where is the canteen 期望dp+高斯消元

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2262 Where is the canteen Time Limit: 10000/5000 MS ...

  9. nodeJS + webStrome

    一.配置开发环境: 1.先安装node (1).访问http://nodejs.org打开安装包,正常安装,点击next即可. 为了测试是否安装成功,打开命令提示符,输入node,则进入node.js ...

  10. 性能分析_linux服务器CPU_中断

    中断 1.  指标范围 1.1  Interrupt rate 应该与cpu利用率结合分析,如果cpu利用率在合理范围内,大量的中断也是可以接受的.一个巨大的中断值,同时伴随着缓慢的系统性能表现,指示 ...