题目大意:f[k]=f[k-1]*s[(n-1)%n]+f[(k-2)]*s[(k-2)%n];会修改某一位置的s值,但循环不变,求f[k];

矩阵快速幂裸题,由于有修改,所以需要线段树优化

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define maxn 50005
  5. #define f(c,d) ((1<<(c))*(d))
  6. struct node{
  7. ll x[][];
  8. }mt,mi,t,tt,x[][maxn];
  9. int n,m,p;
  10. ll k,s[maxn],ti;
  11. pair<ll,ll>v[maxn];
  12. node operator * (node a,node b){
  13. node c=mt;
  14. for(int i=;i<;++i)
  15. for(int j=;j<;++j)
  16. for(int k=;k<;++k)
  17. c.x[i][j]=(c.x[i][j]+a.x[i][k]*b.x[k][j]%p)%p;
  18. return c;
  19. }
  20. node operator ^ (node a,ll y){
  21. if(y==)return mi;
  22. node c=a;y--;
  23. while(y){
  24. if(y&)c=c*a;
  25. y>>=;a=a*a;
  26. }return c;
  27. }
  28. node ask(int a,int b,int c,int d){
  29. if(f(c,d)==a&&f(c,d+)==b)return x[c][d];
  30. c--;d=d<<|;
  31. if(b<=f(c,d))return ask(a,b,c,d-);
  32. if(a>=f(c,d))return ask(a,b,c,d);
  33. return ask(a,f(c,d),c,d-)*ask(f(c,d),b,c,d);
  34. }
  35. node ask(int a,int b){
  36. if(a==b)return mi;
  37. return ask(a,b,,);
  38. }
  39. void to(ll a){
  40. if(a/n-ti/n){
  41. t=t*ask(ti%n,n);
  42. t=t*(x[][]^(a/n-ti/n-));
  43. t=t*ask(,a%n);
  44. }else t=t*ask(ti%n,a%n);
  45. ti=a;
  46. }
  47. int main(){
  48. scanf("%I64d%d",&k,&p);
  49. mi.x[][]=mi.x[][]=%p;
  50. scanf("%d",&n);
  51. for(int i=;i<n;++i)scanf("%I64d",&s[i]);
  52. for(int i=;i<n;++i){
  53. x[][i].x[][]=s[i]%p;
  54. x[][i].x[][]=;
  55. x[][i].x[][]=s[(i+)%n]%p;
  56. }
  57. for(int i=;i<;++i)
  58. for(int j=;f(i,j)<n;++j){
  59. x[i][j]=x[i-][j<<];
  60. if(f(i-,(j<<|))<n)x[i][j]=x[i-][j<<]*x[i-][j<<|];
  61. }
  62. scanf("%d",&m);
  63. for(int i=;i<m;++i)scanf("%I64d%I64d",&v[i].first,&v[i].second);
  64. sort(v,v+m);
  65. ti=;
  66. t=mi;
  67. for(int i=;i<m;++i){
  68. if(v[i].first>k)break;
  69. if(ti!=v[i].first){
  70. to(v[i].first-);
  71. tt.x[][]=s[ti%n]%p;
  72. tt.x[][]=;
  73. tt.x[][]=v[i].second%p;
  74. t=t*tt;
  75. ti++;
  76. }
  77. if(ti==k)break;
  78. ti++;
  79. tt.x[][]=v[i].second%p;
  80. tt.x[][]=;
  81. tt.x[][]=(v[i+].first==ti?v[i+].second:s[ti%n])%p;
  82. t=t*tt;
  83. }
  84. to(k);
  85. printf("%I64d\n",t.x[][]);
  86. return ;
  87. }

575A

codeforces575A Fibonotci的更多相关文章

  1. cf575A Fibonotci

    Fibonotci sequence is an integer recursive sequence defined by the recurrence relation Fn = sn - 1·F ...

  2. Bubble Cup 8 finals A. Fibonotci (575A)

    题意: 定义类循环序列为 长度无限,且除了有限个元素外,均满足s[i] ≡ s[i mod N] (i≥N). 现在有数列F,定义为 F[i] = s[i-2]*F[i-1] + s[i-1]*F[i ...

  3. CF575A Fibonotci [线段树+矩阵快速幂]

    题意 \(s\{\}\) 是一个循环数列 循环节为 \(n\),你可以改掉 \(m\) 项,这 \(m\) 项独立,且不影响循环节 考虑线段树维护矩阵,单点修改最多m次,每次矩阵快速幂就完事了 // ...

  4. Codeforces 575A - Fibonotci

    题面传送门 题意: 给出 \(s_0,s_1,s_2,\dots,s_{n-1}\),对于 \(i\geq n\),有 \(m\) 个 \(s_i\) 满足 \(s_i\neq s_{i\bmod n ...

  5. 「考试」联赛模拟36-39,noip晚间小测2-3

    36.1 party(CF623D) 很是鸡贼的一道题 首先要明确一点,抓人是有策略,而不是随机的,可以认为等同于按一个给定的顺序猜人,那么这时猜中的概率就只是抓住这个人的概率了 对于每一次猜测,因为 ...

随机推荐

  1. 去除手机端a标签等按下去背景色

    a,button,input,textarea,label,i,em{/*highlight*/ -webkit-tap-highlight-color: rgba(255,0,0,0); borde ...

  2. Scau 8633 回文划分 mancher + dp

    时间限制:1000MS 内存限制:1000K 提交次数: 通过次数: 题型: 编程题 语言: G++;GCC Description 我们说一个字符串是回文串,那么意味着这个串从两边读起来的字母都是一 ...

  3. Java与.NET随笔

    .NET与Java,因这两种技术的相似性,总是会让人拿来做比较,并且总有人想让二者一分高下,最后得出孰优孰劣的结论.由于本人先用.NET,后转Java,现在.NET与Java二者并用,所以对二者间的差 ...

  4. 使用maven 如何生成源代码的jar包

    http://hw1287789687.iteye.com/blog/1943157

  5. http://www.roncoo.com/course/view/a09d8badbce04bd380f56034f8e68be0

    http://www.roncoo.com/course/view/a09d8badbce04bd380f56034f8e68be0

  6. linux 服务初识

    1. daemon 和 service 系统为了实现某些功能,必须提供一些服务(service),但是service的提供总是需要进程的运行,实现service 的程序我们称为daemon(“守护神” ...

  7. c++ 服务端 客户端

    转载自:http://blog.csdn.net/orange_xxx/article/details/7276868 ,谢谢原作者. 作为个人学习的笔记使用. 服务端: // Server.cpp ...

  8. Android自动化测试 - Robotium之Robotium在不同分辨率下clickonview不支持解决方案

    使用Robotium中的clickonview方法进行点击操作时,可能在你本机上能够顺利执行,但把脚本移植到不同分辨率的设备下却有可能点不到控件的情况. 网上找了一些资料,基本一条语句可以搞定: 在m ...

  9. 快学Java NIO 续篇

    可以先看Java NIO的整体介绍,这篇接着说以下内容,<快学Java NIO>续篇 FileChannel SocketChannel ServerSocketChannel Java ...

  10. JNDI 配置:JBoss + MySQL

    一.JNDI 名词解释 JNDI 是Java 命名和目录接口(Java Naming and Directory Interface,JNDI)的简称.从一开始就一直是 Java 2 平台企业版(JE ...