分析:(别人写的) 对于所有(l, r)区间,固定右区间,所有(li, r)一共最多只会有log个不同的gcd值, 可以nlogn预处理出所有不同的gcd区间,这样区间是nlogn个,然后对于询问离线处理, 用类似询问区间不同数字的方法,记录每个不同gcd最后出现的位置,然后用树状数组进行维护 注: ...
分类:
编程语言 时间:
2016-04-20 00:13:51
阅读次数:
1499
1.题目描述:点击打开链接
2.解题思路:本题利用莫队算法解决。由于是第一次学习这个算法,因此研究了比较长的一段时间才弄懂。首先,莫队算法解决的问题是无修改的离线区间查询问题。该算法实际上是由曼哈顿距离最小生成树演变来的,由于要处理m个区间,可以将这m个区间看做二维平面上的点,那么处理这m个区间就等价于让这m点连通,且总的转移代价最小。这其实就是一个曼哈顿距离最小生成树问题。
经典的曼...
分类:
其他好文 时间:
2015-08-15 15:01:01
阅读次数:
121
题目链接:hdu 5381 The sum of gcd
将查询离线处理,按照r排序,然后从左向右处理每个A[i],碰到查询时处理。用线段树维护,每个节点表示从[l,i]中以l为起始的区间gcd总和。所以每次修改时需要处理[1,i-1]与i的gcd值,但是因为gcd值是递减的,成log级,对于每个gcd值记录其区间即可。然后用线段树段修改,但是是修改一个等差数列。
#inclu...
分类:
其他好文 时间:
2015-08-15 11:56:05
阅读次数:
125
输入a b c d k求有多少对x y 使得x在a-b区间 y在c-d区间 gcd(x, y) = k 此外a和c一定是1由于gcd(x, y) == k 将b和d都除以k 题目转化为1到b/k 和1到d/k 2个区间 如果第一个区间小于第二个区间 讲第二个区间分成2部分来做1-b/k 和 b/k+...
分类:
其他好文 时间:
2014-12-26 20:07:36
阅读次数:
136
输入a b c d k求有多少对x y 使得x在a-b区间 y在c-d区间 gcd(x, y) = k 此外a和c一定是1
因为gcd(x, y) == k 将b和d都除以k 题目转化为1到b/k 和1到d/k 2个区间 假设第一个区间小于第二个区间 讲第二个区间分成2部分来做1-b/k 和 b/k+1-d/k
第一部分对于每个数i 和他互质的数就是这个数的欧拉函数值 所有数的欧拉函数的和就是...
分类:
其他好文 时间:
2014-10-13 15:02:09
阅读次数:
193
注意到每个区间生存下来的蚂蚁的长度等于区间的gcd于是可以先预处理出区间的gcd然后二分查找就好了预处理gcd我这里用的是倍增法总的时间复杂度O(NlogN)/* Cf 271F 倍增求区间GCD 对下标二分 时间复杂度O(NlogN)*/#inclu...
分类:
其他好文 时间:
2014-10-08 00:08:34
阅读次数:
214
给定n个数第一个操作和普通,区间覆盖性的,把l-r区间的所有值改成固定的val第二个操作是重点,输入l r x 把l-r区间的所有大于x的数,变成gcd(a[i],x) a[i]即指满足条件的序列上的数值最后才输出所有值当时苦思这个地方如何优化,想着不可能单点去更新吧,但是区间gcd,不能保存下来,...
分类:
其他好文 时间:
2014-08-01 04:42:51
阅读次数:
248