CH 4302 Interval GCD】的更多相关文章

辗转相减法的扩展 $gcd(x, y, z) = gcd(x, y - x, z - y)$ 当有n个数时也成立 所以构造$a_{i}$的差分数组$b_{i} = a_{i} - a_{i - 1}$,用一个线段树来维护b数组的gcd,这样每次区间修改相当于两次单点修改 考虑到询问的时候$ans = gcd(a_{l}, query(l +1, r))$所以我们再维护原数组a的值,直接差分之后用一个树状数组就好了 注意判断边界情况. Code: #include <cstdio> #inclu…
题意 给定一个长度为N的数列A,以及M条指令 (N≤5* 10^5, M<=10^5),每条指令可能是以下两种之一: "C l r d",表示把 A[l],A[l+1],-,A[r] 都加上 d. "Q l r",表示询问 A[l],A[l+1],-,A[r] 的最大公约数(GCD). 由<九章算术>中的更相减损我们知道gcd(x,y)=gcd(x,y-x)同理可以推到多个整数.(可以用数学归纳法证明) 因此,构造一个长度为N的新数列B,其中B[i…
题意 4302 Interval GCD 0x40「数据结构进阶」例题 描述 给定一个长度为N的数列A,以及M条指令 (N≤5*10^5, M<=10^5),每条指令可能是以下两种之一: "C l r d",表示把 A[l],A[l+1],-,A[r] 都加上 d. "Q l r",表示询问 A[l],A[l+1],-,A[r] 的最大公约数(GCD). 输入格式 第一行两个整数N,M,第二行N个整数Ai,接下来M行每条指令的格式如题目描述所示. 输出格式 对…
等差数列 为了检验学生的掌握情况,jyy布置了一道习题:给定一个长度为N(1≤N≤100,000)的数列,初始时第i个数为vi(vi是整数,−100,000≤vi≤100,000),学生们要按照jyy的给出的操作步骤来改变数列中的某些项的值.操作步骤的具体形式为:A s t a b (s,t,a,b均为整数,1≤s≤t≤N,−100,000≤a,b≤100,000),它表示,在序列的[s,t]区间上加上初值为a,步长为b的等差数列.即vi变为vi+a+b×(i−s)(对于s≤i≤t). 在焦头烂…
描述 给定一张N个点的有向图,点i到点j有一条长度为 i/(gcd(i,j))的边.有Q个询问,每个询问包含两个数x和y,求x到y的最短距离. 输入格式 第一行包含两个用空格隔开的整数,N和Q. 接下来Q行,每行两个数x和y. 输出格式 输出Q行整数,表示从x到y的最短距离. 样例输入 6 2 4 6 2 5 样例输出 2 2 数据范围与约定 对于30%的数据,1<=N<=100. 对于70%的数据,1<=N<=10^5. 对于100%的数据,1<=N<=10^7,1&…
题目大意:给定一个长度为 N 的序列,M 个操作,支持区间加,区间查询最大公约数. 题解: 先来看一个子问题,若是单点修改,区间最大公约数,则可以发现,每次修改最多改变 \(O(logn)\) 个答案,且 gcd 可以合并,因此可以直接在线段树上维护. 但是对于区间加来说,无法在已知区间加了某一个数时快速计算出新的区间最大公约数,因此,最坏情况下复杂度可能退化到 \(O(n)\).考虑辗转相除法的性质,\[gcd(x,y,z)=gcd(x,y-x,z-y)\]可以发现,若维护的是原序列的差分序列…
题目描述 给定一个长度为N的数列A,以及M条指令 (N≤5*10^5, M<=10^5),每条指令可能是以下两种之一:“C l r d”,表示把 A[l],A[l+1],…,A[r] 都加上 d.“Q l r”,表示询问 A[l],A[l+1],…,A[r] 的最大公约数(GCD). 输入 第一行两个整数N,M,第二行N个整数Ai,接下来M行每条指令的格式如题目描述所示. 输出 对于每个询问,输出一个整数表示答案. 样例输入 5 5 1 3 5 7 9 Q 1 5 C 1 5 1 Q 1 5 C…
题目描述 给定一个长度为N的数列A,以及M条指令 (N≤5*10^5, M<=10^5),每条指令可能是以下两种之一: "C l r d",表示把 A[l],A[l+1],-,A[r] 都加上 d. "Q l r",表示询问 A[l],A[l+1],-,A[r] 的最大公约数(GCD). 输入 第一行两个整数N,M,第二行N个整数Ai,接下来M行每条指令的格式如题目描述所示. 输出 对于每个询问,输出一个整数表示答案. 样例输入 5 5 1 3 5 7 9 Q…
在使用定时器时,我们经常使用NSTimer,但是由于NSTimer会受RunLoop影响,当RunLoop处理的任务很多时,就会导致NSTimer的精度降低,所以在一些对定时器精度要求很高的情况下,应该考虑采用GCD定时器,实现代码如下: // 队列(队列时用来确定该定时器存在哪个队列中) dispatch_queue_t queue = dispatch_get_main_queue(); // 创建GCD定时器 _timer = dispatch_source_create(DISPATCH…
A.Anton and Danik Problems: 给你长度为N的,只含'A','D'的序列,统计并输出何者出现的较多,相同为"Friendship" Analysis: lucky_ji: 水题,模拟统计A和D的数目比较大小输出结果即可 Tags: Implementation B.Anton and Digits Problems: 给定k2个2,k3个3,k5个5及k6个6,可以组成若干个32或256,求所有方案中Sigma的最大值 Analysis: lucky_ji: 同…