链接
传送门: here
题意
1 ≤ n , c ≤ 1 e 18 , 1 ≤ k ≤ 1 e 5 1\le n,c\le1e18, 1\le k\le 1e5 1≤n,c≤1e18,1≤k≤1e5
F i b 1 = 1 , F i b 1 = 1 , F i b n = F i b n − 1 + F i b n − 2 Fib1=1,Fib1=1,Fib_n=Fib_{n-1}+Fib_{n-2} Fib1=1,Fib1=1,Fibn=Fibn−1+Fibn−2
求 F i b 0 k + F i b c k + F i b 2 c k + . . . + F i b n c k , m o d = 1 e 9 + 9 Fib_0^k+Fib_{c}^k+Fib_{2c}^k+...+Fib_{nc}^k,\;mod=1e9+9 Fib0k+Fibck+Fib2ck+...+Fibnck,mod=1e9+9
前请提要
有关取模、同余、逆元的一些东西:
f i b [ n ] = 5 5 × [ ( 1 + 5 2 ) n − ( 1 − 5 2 ) n ] fib[n] = \frac{\sqrt5}{5}\times [(\frac{1+\sqrt5}{2})^n-(\frac{1-\sqrt5}{2})^n] fib[n]=55×[(21+5)n−(21−5)n]
p = 1 e 9 + 9 p = 1e9 + 9 p=1e9+9
二次剩余:
38300801 6 2 ≡ 5 ( m o d p ) 383008016^2 ≡ 5 (mod\;p) 3830080162≡5(modp)
383008016 ≡ 5 ( m o d p ) 383008016 ≡ \sqrt5 (mod\;p) 383008016≡5(modp)
1 5 ≡ 276601605 ( m o d p ) \frac{1}{\sqrt5}≡276601605(mod\;p) 51≡276601605(modp)
383008016 的 逆 元 = 276601605 383008016的逆元 = 276601605 383008016的逆元=276601605
( 1 + 5 ) / 2 ≡ 691504013 ( m o d p ) (1+\sqrt5)/2≡691504013(mod\;p) (1+5)/2≡691504013(modp)
383008017 × 2 的 逆 元 = 691504013 383008017\times 2的逆元 = 691504013 383008017×2的逆元=691504013
( 1 − 5 ) / 2 ≡ 308495997 ( m o d p ) (1-\sqrt5)/2≡308495997(mod\;p) (1−5)/2≡308495997(modp)
( p − 383008016 + 1 ) × 2 的 逆 元 = 308495997 (p-383008016+1)\times 2的逆元 = 308495997 (p−383008016+1)×2的逆元=308495997
f i b [ n ] = 276601605 × [ ( 691504013 ) n − ( 308495997 ) n ] ( m o d p ) fib[n] = 276601605\times [(691504013)^n-(308495997)^n] (mod\;\;p) fib[n]=276601605×[(691504013)n−(308495997)n](modp)
f i b fib fib前 n n n项和等比数列求和: s u m = a a − 1 × ( a n − 1 ) ( m o d p ) = a 2 ( a n − 1 ) ( m o d p ) = a n + 2 − a 2 ( m o d p ) sum = \frac{a}{a-1} \times (a^n - 1) (mod\;\;p) = a^2(a^n-1)(mod\;\;p)=a^{n+2}-a^2(mod\;\;p) sum=a−1a×(an−1)(modp)=a2(an−1)(modp)=an+2−a2(modp)
当 p = 1 e 9 + 9 , a = 691504013 或 308495997 时 成 立 p=1e9+9, a = 691504013或308495997时成立 p=1e9+9,a=691504013或308495997时成立。
思路
通过上面我们知道,在模 p = 1 e 9 + 9 p=1e9+9 p=1e9+9意义下有:
f i b [ n ] = 276601605 × [ ( 691504013 ) n − ( 308495997 ) n ] ( m o d p ) = d × ( a n − b n ) fib[n] = 276601605\times [(691504013)^n-(308495997)^n] (mod\;\;p)=d\times(a^n-b^n) fib[n]=276601605×[(691504013)n−(308495997)n](modp)=d×(an−bn)
f i b n c = d × ( a c n − b c n ) = d × ( A n − B n ) = F i b C n , A = a c , B = b c fib_{nc}=d\times(a^{cn}-b^{cn})=d\times(A^n-B^n)=FibC_n,\;A=a^c,B=b^c fibnc=d×(acn−bcn)=d×(An−Bn)=FibCn,A=ac,B=bc
( 1 d f i b n c ) k (\frac1dfib_{nc})^k (d1fibnc)k二项式展开有:
C k 0 ( A n ) k + ( − 1 ) 1 C k 1 ( A n ) k − 1 ( B n ) + ( − 1 ) 2 C k 2 ( A n ) k − 2 ( B n ) 2 + . . . + ( − 1 ) r C k r ( A n ) k − r ( B n ) r + . . . + ( − 1 ) k − 1 C k k − 1 ( A n ) ( B n ) k − 1 + ( − 1 ) k C k k ( B n ) k C_k^0(A^n)^k+(-1)^1C_k^1(A^n)^{k-1}(B^n)+(-1)^2C_k^2(A^n)^{k-2}(B^n)^2+...+(-1)^rC_k^r(A^n)^{k-r}(B^n)^r+...+(-1)^{k-1}C_k^{k-1}(A^n)(B^n)^{k-1}+(-1)^kC_k^k(B^n)^k Ck0(An)k+(−1)1Ck1(An)k−1(Bn)+(−1)2Ck2(An)k−2(Bn)2+...+(−1)rCkr(An)k−r(Bn)r+...+(−1)k−1Ckk−1(An)(Bn)k−1+(−1)kCkk(Bn)k
C k 0 ( A k ) n + ( − 1 ) 1 C k 1 ( A k − 1 ) n ( B ) n + ( − 1 ) 2 C k 2 ( A k − 2 ) n ( B 2 ) n + . . . + ( − 1 ) r C k r ( A k − r ) n ( B r ) n + . . . + ( − 1 ) k − 1 C k k − 1 ( A ) n ( B k − 1 ) n + ( − 1 ) k C k k ( B k ) n C_k^0(A^k)^n+(-1)^1C_k^1(A^{k-1})^n(B)^n+(-1)^2C_k^2(A^{k-2})^n(B^2)^n+...+(-1)^rC_k^r(A^{k-r})^n(B^r)^n+...+(-1)^{k-1}C_k^{k-1}(A)^n(B^{k-1})^n+(-1)^kC_k^k(B^k)^n Ck0(Ak)n+(−1)1Ck1(Ak−1)n(B)n+(−1)2Ck2(Ak−2)n(B2)n+...+(−1)rCkr(Ak−r)n(Br)n+...+(−1)k−1Ckk−1(A)n(Bk−1)n+(−1)kCkk(Bk)n
现在我们要求 F i b C FibC FibC的前 n n n项和,我们 O ( k ) O(k) O(k)枚举 C k r C_k^r Ckr,逐项求出前 n n n项和再累加即可。
对于 ( − 1 ) r C k r (-1)^rC_k^r (−1)rCkr而言,令 a = A k − r B r a=A^{k-r}B^r a=Ak−rBr,前 n n n项和为 ( − 1 ) r C k r × a × ( a n − 1 ) a − 1 (-1)^rC_k^r\times\frac {a\times(a^n-1)}{a-1} (−1)rCkr×a−1a×(an−1)
可以加的几个优化:
备注
参考:ACDreamers
AC_CODE
here
链接
传送门: here
题意
n , m , q ≤ 1 e 5 n,m,q\le 1e5 n,m,q≤1e5无向图, S u = { A v ∣ ( u , v ) ∈ E } S_u=\{A_v|(u,v)\in E\} Su={Av∣(u,v)∈E}, F u = m e x ( S u ) F_u=mex(S_u) Fu=mex(Su)
t y p e 1 : 1 u x , c h a n g e A u = x type 1: 1\;u\;x, change\;A_u = x type1:1ux,changeAu=x
t y p e 2 : 2 u , q u e r y F u type 2: 2\;u, query\;F_u type2:2u,queryFu
思路
度数大于 m \sqrt m m的超级点不超多 m \sqrt m m个。
小点暴力算,超级点用分块或者bit,线段树
分块复杂度 O ( n ∗ n ) O(n*\sqrt n) O(n∗n), 1170ms
线段树复杂度 O ( n ∗ n ∗ l o g ( n ) ) O(n*\sqrt n*log(n)) O(n∗n∗log(n)), 1560MS
树状数组+二分求mex复杂度 O ( n ∗ n ∗ l o g ( n ) ∗ l o g ( n ) ) O(n*\sqrt n*log(n)*log(n)) O(n∗n∗log(n)∗log(n)), 1092MS
树状数组求mex复杂度 O ( n ∗ n ∗ l o g ( n ) ∗ l o g ( n ) ) O(n*\sqrt n*log(n)*log(n)) O(n∗n∗log(n)∗log(n)), 1762MS
动态开点线段树TLE
分块维护每个块内数字第一次出现的次数, O ( n ) O(\sqrt n ) O(n)修改, O ( n ) O(\sqrt n ) O(n)查询
线段树维护mex其实就是维护最小值
备注
AC_CODE
分块,线段树,树状数组求mex,树状数组+二分求mex
链接
传送门: here
题意
有 n ( 1 e 5 ) n(1e5) n(1e5)辆车在数轴正半轴,每个车在初始位置在 p i p_i pi、初速度 0 0 0,加速度 a i a_i ai,可能有车信息完全相同,问有多少辆车存在某一个时刻它走在当之无愧的第一名,也就是没有并列。
思路
1.把所有车子 u n i q u e unique unique一下,相同车子记录他的个数(当然如果它个数大于 1 1 1,我是不会算它的贡献滴)
2.用单调栈预处理一下,去掉永远不可能在第一位的车子。
3.用 r s [ ] rs[] rs[]记录每个车子下一个要超过的车子的编号
4.优先队列保存每个车子 i i i超过车子 r s [ i ] rs[i] rs[i]的时间,优先队列每次取出时间最短的那个车子
6.判断他是否超车到了第一位,若是就记录,并且若这是最初排在最后一位的车子就break结束
5.然后去掉 r s [ i ] rs[i] rs[i]这个车子,因为他还没到第一就已经被车子 i i i超车了
6.复杂度 O ( n ∗ l o g ( n ) ) O(n*log(n)) O(n∗log(n))
备注
去年多校也有一个车子过红绿灯贪心题HDU Vacation
AC_CODE
here