loj1370(欧拉函数+线段树)】的更多相关文章

传送门:Bi-shoe and Phi-shoe 题意:给出多个n(1<=n<=1e6),求满足phi(x)>=n的最小的x之和. 分析:先预处理出1~1e6的欧拉函数,然后建立一颗线段树维护最大值,对于每个n询问大于等于n的最左边下标. #pragma comment(linker,"/STACK:1024000000,1024000000") #include <cstdio> #include <cstring> #include <…
分析:对于每个数,找到欧拉函数值大于它的,且标号最小的,预处理欧拉函数,然后按值建线段树就可以了 #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <cmath> #include <map> using namespace std; typedef long long LL; ; const int INF…
链接 题意:给定长度为 \(n\) 的序列 A,每次求区间 \([l,r]\) 的乘积的欧拉函数 题解 考虑离线怎么搞,将询问按右端点排序,然后按顺序扫这个序列 对于每个 \(A_i\) ,枚举它的质因数,由于不同的质因数只算一次,所以我们只关心每个质数它最后一次出现的位置,开一棵线段树维护一下每个位置的质数,加入新的质数时,先把之前的删掉,再加新的 现在强制在线,可以开可持久化线段树维护一下 #include<bits/stdc++.h> #define REP(i,a,b) for(int…
题意 给出一个长度为 \(n\) 的序列 \(\{a_i\}\) 以及一个数 \(p\) ,现在有 \(m\) 次操作,每次操作将 \([l, r]\) 区间内的 \(a_i\) 变成 \(c^{a_i}\) . 或者询问 \([l, r]\) 之间所有 \(a_i\) 的和对 \(p\) 取模的结果 . \(n, m \le 5 \times 10^4, p \le 2^{14}\) 题解 考虑欧拉降幂(扩展欧拉定理),不会的可以看 这篇博客 . 然后对于这些不断叠加的指数,有如下式子 \[…
这题是六省联考的...据说数据还出了点锅,心疼六省选手QAQ 首先要知道扩展欧拉定理... 可以发现每次区间操作都会使模数进行一次phi操作,而一个数最多取logp次phi就会变成1,这时后面的指数就没有用了,以后这个数的答案就不会变化了,也就是说一个数最多只会进行log次修改,那么我们就可以用线段树维护,如果某棵子数的最小操作次数达到了使模数变成1的次数我们就不需要修改了. 但是我们发现快速幂还有一个log,如果不优化的话三个log很有可能TLE.这个时候就有新操作了,底数是一定的c,指数最大…
原题为2017六省联考的D1T3 给出一个序列,m次操作,模数p和参数c 操作分为两种: 1.将[l,r]区间内的每个数x变为\(c^x\) 2.求[l,r]区间内数的和%p 首先,我们要了解一些数论姿势: 1.扩展欧拉定理 //我们熟知的费马小定理用于p是质数,欧拉定理用于a,p互质,而这道题都不满足这个限制 当\((b>=\phi(p))\)时,\(a^b=a^{b\mod \phi(p) + \phi(p)}\) 2.(其实不算数论姿势)一个数最多经过log此\(\phi\)就会变成1 所…
刷个清新的数据结构题爽一爽? 题意: 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a . 操作 3 :询问某个节点 x 到根的路径中所有点的点权和.   注意到操作3,询问x到根的路径之间点权和,容易发现这就是欧拉序列中的前缀和. 所以按照树的欧拉序列建线段树,然后操作1就变成单点修改,操作2,就变成了区间内某些点+a,某些点-a,也容易用tag…
题意: 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a . 操作 3 :询问某个节点 x 到根的路径中所有点的点权和.   思路: 处理出这棵树的欧拉序,入栈时为这个点的正权,出栈时为这个点的负权 对于操作1,对x入栈点加a,出栈点减a 对于操作2,对x入栈点到x出栈点所有的点执行操作1 对于操作3,即查询点1的入栈点到x入栈点的点权和   在正…
题意: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a . 操作 3 :询问某个节点 x 到根的路径中所有点的点权和. 显然树链剖分可做,但我是来练欧拉序列的 和splay维护一样了 其实没大有意义....如果树形态不改变人家树链剖分本来就可以维护子树信息.... 唯一的好处就是不会爆栈吧 #include <iostream> #include <cstdio> #include <cstring> #i…
这题我在考场上也是想出了正解的……但是没调出来. 题目链接:CF原网 题目大意:给一个长度为 $n$ 的序列 $a$,$q$ 个操作:区间乘 $x$,求区间乘积的欧拉函数模 $10^9+7$ 的值. $1\le n\le 4\times 10^5,1\le q\le 2\times 10^5,1\le a_i,x\le 300$.时限 5.5s,空限 256MB. 明显线段树. 有一个想法是维护区间积的欧拉函数,但是这样时间复杂度和代码复杂度都很高…… 我的做法是维护区间积.而欧拉函数,就是看看…