CC DGCD:Dynamic GCD——题解】的更多相关文章

CodeChef题面 Time limit 210 ms Code length Limit //内存限制也不说一下,真是的-- 50000 B OS Linux Language limit C, CPP14, JAVA, PYTH, PYTH 3.6, CS2, PAS fpc, PAS gpc, RUBY, PHP, GO, NODEJS, HASK, SCALA, D, PERL, FORT, WSPC, ADA, CAML, ICK, BF, ASM, CLPS, PRLG, ICON…
https://vjudge.net/problem/CodeChef-DGCD https://www.codechef.com/problems/DGCD 题目大意: 给一颗带点权的树,两个操作: 1.将两点间最短路上的点权+d 2.查询两点间最短路上的点权的GCD 显然又是树链剖分,点这里看树链剖分原理. 但是我们发现一个问题,我们虽然可以建立线段树维护GCD,但是没有办法处理区间修改问题. 我们考虑更相减损之术的原理,两数做差后的结果和小数的GCD=原来的GCD. 所以我们在维护单点权值…
Dynamic GCD 题意:一棵树,字词树链加,树链gcd 根据\(gcd(a,b)=gcd(a,a-b)\) 得到\(gcd(a_1, a_2, ..., a_i) = gcd(a_1, a_1-a_2, a_2-a_3,...)\) 同时维护原序列和差分序列就行了 无脑树剖,分成几段.不需要轻儿子的差分值. 注意最后答案取一下绝对值!!! #include <iostream> #include <cstdio> #include <cstring> #inclu…
题目:hdu的5726 (我原博客的东西,正好整理过来,属于st表裸题) (可以看出我当时有多么的菜--) 这道题写了一遍,然而蒟蒻的我的时间爆炸了-- 于是看了一下学长的代码(顺便在此处%一下学长). 不明觉厉了两个小时 终于看明白了 由于这道题是基于st表写的(这部分比较基础) 我就直接讲第二问(就是查相等GCD个数) 那么为了不用每一个区间挨个比较一遍的话,我们所能想到的速度较快的方法-- 对!二分. 但是如果把二分的方法想象成类似于查询数的方法那是不可以的(因为数字是无序的,很容易造成G…
原题链接 庆祝一下:数论紫题达成成就! 第一道数论紫题.写个题解庆祝一下吧. 简要题意:求 \[\sum_{i=1}^n \sum_{j=1}^n [gcd(i,j)==p] \] 其中 \(p\) 为素数. 注: $ [A] = 0 $ 当且仅当 \(A\) 不成立. $ [A] = 1 $ 当且仅当 \(A\) 成立. 这不就是单位函数的定义嘛. 先抛个定义: \[f_n = \sum_{i=1}^n [\gcd(i,n) == 1] \] 即 \(\leq n\) 且 与 \(n\) 互质…
嘟嘟嘟vjudge 我今天解决了一个历史遗留问题! 题意:给一棵树,写一个东西,支持一下两种操作: 1.\(x\)到\(y\)的路径上的每一个点的权值加\(d\). 2.求\(x\)到\(y\)路径上所有点权的gcd. 树上路径操作自然能想到树剖,但问题在于区间加操作不好维护. 因此我们先考虑序列上的操作. 求gcd,方法除了辗转相除,还有更相减损之术啊!这个有一个非常好的性质,就是两数的gcd等于其中一个数和两数只差的gcd.两数之差,就让我们想到了差分.这样就能从区间修改变成了只修改连个点了…
http://www.lydsy.com/JudgeOnline/problem.php?id=2820 Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必然不会了,于是向你来请教……多组输入 Input 第一行一个整数T 表述数据组数接下来T行,每行两个正整数,表示N, M Output T行,每行一个整数表示第i组数据的结果 Sample Input 2…
http://www.lydsy.com/JudgeOnline/problem.php?id=1901 Description 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1 ],a[i+2]……a[j]中第k小的数是多少(1≤k≤j-i+1),并且,你可以改变一些a[i]的值,改变后,程序还能针对改 变后的a继续回答上面的问题. Input 第一行有两个正整数n(1≤n≤10000),m(1≤m≤1000…
树链剖分+差分 直接区间加显然是不行的,由于gcd(a,b,c)=gcd(a,a-b,b-c),那么我们对这些数差分,然后就变成单点修改.原本以为这道题很简单,没想到这么麻烦,就膜了发代码. 首先我们考虑如何在树上差分序列,每个节点有很多个儿子,如果把每个儿子都修改一下就GG了,其实我们可以这个样子,我们只维护重儿子的差分值,但是如果从轻儿子爬上来呢?我们就把父亲节点单独取出来做gcd,也就是我们再维护一个原序列的值,每次爬重链的时候就把链下面最深的点用原序列中的值来求,这样就可以了.然后还有各…
题意 给定一个长度为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…