题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4676

解题思路:总体上这是一个数学题加上离线与分块处理加速。显然对于区间内有公约数x的数来说,假设有num[x]个x的倍数,那么答案显然是sigma(C(num[x],2)*f(x)),根据容斥原理f(x)应该是一个小于x的数并且满足sigma(f(d)) = x{d|x},因为有x这个约数的数对一定也有d这个约数,其中d|x,所以我在加上C(num[x],2)*f(x)之前就把C(num[d],2)*f(d)加上了,而总共对于x所需累加的次数是x,所以有sigma(f(d)) = x{d|x},而这正是麦比乌斯反演公式,可得f(d)为欧拉函数,http://www.isnowfy.com/mobius-inversion/

然后每加入一个数我们只要加上num[x]*phi[x]就行了(根据组合公式的性质比较容易看出)。但是直接暴力的话复杂度会超,就是对于查询区间大幅波动的情况就需要不停的加入点,删除点,复杂度估计能达到n平方,所以我们采用离线查询的方式,然后对查询左端点分段排,在每一段内保证查询右端点的有序性,这样就可以大致保持查询左端点和右端点的有序性。下面上代码:

#include<cstdio>
#include<iostream>
#include<vector>
#include<cmath>
#include<cstring>
#include<algorithm>
#define N 20005
using namespace std;
int phi[N],a[N],num[N],ans[N];
int L,R,ret;
vector<int>d[N];
struct node
{int l,r,id,s;
}seg[N];
void init()
{for(int i = 1;i<N;i++)phi[i] = i;for(int i = 2;i<N;i++)if(phi[i] == i)for(int j = i;j<N;j+=i)phi[j] = phi[j]/i*(i-1);for(int i = 1;i<N;i++)for(int j = i;j<N;j+=i)d[j].push_back(i);
}
void Insert(int x)
{for(int i = 0;i<d[x].size();i++){int v = d[x][i];ret+=num[v]*phi[v];num[v]++;}
}
void Delete(int x)
{for(int i = 0;i<d[x].size();i++){int v = d[x][i];num[v]--;ret-=num[v]*phi[v];}
}
void query(int l,int r)
{for(int i = l;i<L;i++)Insert(a[i]);for(int i = L;i<l;i++)Delete(a[i]);for(int i = r+1;i<=R;i++)Delete(a[i]);for(int i = R+1;i<=r;i++)Insert(a[i]);
}
bool cmp(node x,node y)
{if(x.s == y.s)return x.r<y.r;return x.s<y.s;
}
int main()
{int t,y,n,m,i,j,cas = 1;scanf("%d",&t);init();while(t--){scanf("%d",&n);int size = sqrt(1.0*n);memset(num,0,sizeof(num));for(i = 1;i<=n;i++)scanf("%d",&a[i]);scanf("%d",&m);for(i = 1;i<=m;i++){scanf("%d%d",&seg[i].l,&seg[i].r);seg[i].id = i;seg[i].s = seg[i].l/size;}sort(seg+1,seg+m+1,cmp);ret = 0;L = seg[1].l;R = seg[1].r;for(i = L;i<=R;i++)Insert(a[i]);ans[seg[1].id] = ret;for(i = 2;i<=m;i++){query(seg[i].l,seg[i].r);L = seg[i].l;R = seg[i].r;ans[seg[i].id] = ret;}printf("Case #%d:\n",cas++);for(i=1;i<=m;i++)printf("%d\n",ans[i]);}return 0;
}

hdu4676 ------麦比乌斯反演分块相关推荐

  1. 读书笔记——数据压缩入门(柯尔特·麦克安利斯)下

    文章目录 数据压缩入门汇总 第九章 数据建模 9.1 马尔科夫链 9.2 部分匹配预测算法PPM 9.2.1 单词查找树 9.2.2 字符的压缩 9.2.3 选择一个合理的N值 9.2.4 处理未知的 ...

  2. bzoj2301: [HAOI2011]Problem b懵逼乌斯反演

    属于结果的和好求但是结果不好求的题 (轻易能得到以k的倍数为最大公约数的对数,但是不好直接求k) 所以一波反演结束 其实反演的时候完全没有反演的感觉,就是不停地恒等变形 算是懵逼乌斯反演最简单的例题 ...

  3. 读书笔记——数据压缩入门(柯尔特·麦克安利斯)中

    文章目录 数据压缩入门汇总 第六章 自适应统计编码 6.1 位置对熵的重要性 6.2 自适应VLC编码 6.2.1 动态创建VLC表 6.2.2 字面值 6.2.3 重置 6.2.4 何时重置 6.3 ...

  4. 读书笔记——数据压缩入门(柯尔特·麦克安利斯)上

    文章目录 数据压缩入门汇总 前言 第一章 概述 1.1 克劳德 • 香农 1.2 数据压缩必备知识 第二章 深入研究信息论 第三章 突破熵 3.1 理解熵 3.2 熵的用处 3.3 理解概率 3.4 ...

  5. 克里斯·麦克切斯尼《高效能人士的执行4原则》读书笔记

    克里斯·麦克切斯尼:肖恩·柯维:吉姆·霍林 原则1:聚焦最重要目标 要事第一,全神贯注 原则2:关注引领性指标 分解目标,落实行动 原则3:坚持激励性记分表 记分衡量,一目了然 原则4:建立规律问责制 ...

  6. 【Unity】Mesh网格编程(四)麦比乌斯环

    前言 事隔四个多月,第二篇网格编程原创,本次献给大家的是麦比乌斯环. 其实这个早就想做了,还是轻松下来的时候思绪转的快. 不废话,先看效果: 博文首发:http://blog.csdn.net/duz ...

  7. BZOJ2818-莫比乌斯反演/欧拉函数

    这道题之前没有看数论函数的时候搞懂了,想到直接用欧拉函数做,现在再来看第一个想法就是这不是莫比乌斯反演嘛. 但还是能用简单数论知识直接做出来的还是尽量做简单一点. 两种方法想到后都写的差不多对了,都爆 ...

  8. BZOJ3930-莫比乌斯反演+杜教筛

    题目的意思很简单,求给定区间内的gcd=k的个数,这应该是传统的莫比乌斯反演了. 有两种思路,一种是直接将里面变成gcd=1,然后里面看作元函数用莫比乌斯函数和恒等函数展开,然后改变求和顺序. 还有一 ...

  9. BZOJ 2301 Problem b(莫比乌斯反演+分块优化)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37166 题意:对于给出的n个询问,每次求有多少个数对(x,y),满 ...

最新文章

  1. 深入理解JVM(5) : Java垃圾收集器
  2. leetcode 2. Add Two Numbers | 2. 两数相加(Java)
  3. padding 后尺寸变化 设置_padding margin border 和元素大小
  4. 【C++】 11_新型的类型转换
  5. RF工具ride使用
  6. c语言对n个数选择排序_选择排序_C语言「抄作业」
  7. 英语演讲计算机ppt模板,英语ppt演讲稿
  8. 惠普找不到远程服务器,找不到网络打印机是怎么回事?
  9. H264/H265码流的编码码率设置
  10. 决策树中的基尼系数、 熵之半和分类误差率
  11. 启动tomcat时候报错(Error deploying web application directory)
  12. 第十六章 SQL命令 CREATE TABLE(三)
  13. python动态页面元素爬取_Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过浏览器审查元素解析真实网页地址...
  14. 「凹凸数据」历史文章合集,更新中
  15. vanilla_使用Vanilla JavaScript构建Cookie库
  16. WPF 3D模型介绍及使用
  17. 贪心算法——旅行家的预算(NOIP1999)
  18. 漫谈何时从单体架构迁移到微服务?
  19. 用IDEA打包springboot项目报错:--- maven-compiler-plugin:3.8.1:compile (default-compile) @ springboot_homewor
  20. 浅谈《家》中觉新形象与封建宗法制

热门文章

  1. 干货,实战滴滴开源Logi-KafkaManager
  2. 技术导航网站源码_qq技术导航_小刀娱乐网源码
  3. Mysql 数据库执行计划 EXPLAIN SELECT * FROM
  4. 海贼王热血航线服务器维护,《航海王热血航线》游戏进不去如何解决 维护中快速解决办法...
  5. Java实现 LeetCode 764 最大加号标志(暴力递推)
  6. 唐僧日记[作者:殷靖海] (一)
  7. Internet/Custom路由配置——网络测试仪实操
  8. 微生信在线绘制KEGG Pathway通路分类汇总图
  9. mysql 烂泥,烂泥:学习mysql的binlog配置
  10. C程序设计谭浩强第五版课后答案 第三章习题答案