hdu4676 ------麦比乌斯反演分块
题目链接: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 ------麦比乌斯反演分块相关推荐
- 读书笔记——数据压缩入门(柯尔特·麦克安利斯)下
文章目录 数据压缩入门汇总 第九章 数据建模 9.1 马尔科夫链 9.2 部分匹配预测算法PPM 9.2.1 单词查找树 9.2.2 字符的压缩 9.2.3 选择一个合理的N值 9.2.4 处理未知的 ...
- bzoj2301: [HAOI2011]Problem b懵逼乌斯反演
属于结果的和好求但是结果不好求的题 (轻易能得到以k的倍数为最大公约数的对数,但是不好直接求k) 所以一波反演结束 其实反演的时候完全没有反演的感觉,就是不停地恒等变形 算是懵逼乌斯反演最简单的例题 ...
- 读书笔记——数据压缩入门(柯尔特·麦克安利斯)中
文章目录 数据压缩入门汇总 第六章 自适应统计编码 6.1 位置对熵的重要性 6.2 自适应VLC编码 6.2.1 动态创建VLC表 6.2.2 字面值 6.2.3 重置 6.2.4 何时重置 6.3 ...
- 读书笔记——数据压缩入门(柯尔特·麦克安利斯)上
文章目录 数据压缩入门汇总 前言 第一章 概述 1.1 克劳德 • 香农 1.2 数据压缩必备知识 第二章 深入研究信息论 第三章 突破熵 3.1 理解熵 3.2 熵的用处 3.3 理解概率 3.4 ...
- 克里斯·麦克切斯尼《高效能人士的执行4原则》读书笔记
克里斯·麦克切斯尼:肖恩·柯维:吉姆·霍林 原则1:聚焦最重要目标 要事第一,全神贯注 原则2:关注引领性指标 分解目标,落实行动 原则3:坚持激励性记分表 记分衡量,一目了然 原则4:建立规律问责制 ...
- 【Unity】Mesh网格编程(四)麦比乌斯环
前言 事隔四个多月,第二篇网格编程原创,本次献给大家的是麦比乌斯环. 其实这个早就想做了,还是轻松下来的时候思绪转的快. 不废话,先看效果: 博文首发:http://blog.csdn.net/duz ...
- BZOJ2818-莫比乌斯反演/欧拉函数
这道题之前没有看数论函数的时候搞懂了,想到直接用欧拉函数做,现在再来看第一个想法就是这不是莫比乌斯反演嘛. 但还是能用简单数论知识直接做出来的还是尽量做简单一点. 两种方法想到后都写的差不多对了,都爆 ...
- BZOJ3930-莫比乌斯反演+杜教筛
题目的意思很简单,求给定区间内的gcd=k的个数,这应该是传统的莫比乌斯反演了. 有两种思路,一种是直接将里面变成gcd=1,然后里面看作元函数用莫比乌斯函数和恒等函数展开,然后改变求和顺序. 还有一 ...
- BZOJ 2301 Problem b(莫比乌斯反演+分块优化)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37166 题意:对于给出的n个询问,每次求有多少个数对(x,y),满 ...
最新文章
- 深入理解JVM(5) : Java垃圾收集器
- leetcode 2. Add Two Numbers | 2. 两数相加(Java)
- padding 后尺寸变化 设置_padding margin border 和元素大小
- 【C++】 11_新型的类型转换
- RF工具ride使用
- c语言对n个数选择排序_选择排序_C语言「抄作业」
- 英语演讲计算机ppt模板,英语ppt演讲稿
- 惠普找不到远程服务器,找不到网络打印机是怎么回事?
- H264/H265码流的编码码率设置
- 决策树中的基尼系数、 熵之半和分类误差率
- 启动tomcat时候报错(Error deploying web application directory)
- 第十六章 SQL命令 CREATE TABLE(三)
- python动态页面元素爬取_Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过浏览器审查元素解析真实网页地址...
- 「凹凸数据」历史文章合集,更新中
- vanilla_使用Vanilla JavaScript构建Cookie库
- WPF 3D模型介绍及使用
- 贪心算法——旅行家的预算(NOIP1999)
- 漫谈何时从单体架构迁移到微服务?
- 用IDEA打包springboot项目报错:--- maven-compiler-plugin:3.8.1:compile (default-compile) @ springboot_homewor
- 浅谈《家》中觉新形象与封建宗法制
热门文章
- 干货,实战滴滴开源Logi-KafkaManager
- 技术导航网站源码_qq技术导航_小刀娱乐网源码
- Mysql 数据库执行计划 EXPLAIN SELECT * FROM
- 海贼王热血航线服务器维护,《航海王热血航线》游戏进不去如何解决 维护中快速解决办法...
- Java实现 LeetCode 764 最大加号标志(暴力递推)
- 唐僧日记[作者:殷靖海] (一)
- Internet/Custom路由配置——网络测试仪实操
- 微生信在线绘制KEGG Pathway通路分类汇总图
- mysql 烂泥,烂泥:学习mysql的binlog配置
- C程序设计谭浩强第五版课后答案 第三章习题答案