\[\begin{eqnarray*}
x_i&=&x_{i-1}+x_{i-2}\\
x_i^2&=&x_{i-2}^2+x_{i-1}^2+2x_{i-2}x_{i-1}\\
x_{i-1}x_i&=&x_{i-1}^2+x_{i-2}x_{i-1}
\end{eqnarray*}\]

故可以构造转移矩阵$A$进行递推。

不妨设$n\geq m$,则可以预处理出$A^0,A^1,...,A^n$以及$A^n,A^{2n},...,A^{nn}$。

那么查询某个数的复杂度为$4^2$。

总时间复杂度为$O(4^3n)$。

#include<cstdio>
#include<algorithm>
#include<tr1/unordered_map>
#define rep(i) for(int i=0;i<4;i++)
using namespace std;
using namespace std::tr1;
typedef long long ll;
const int N=4,M=100005;
int n,m,lim,q,P,C1,C2,i,j,x,y,d,r,o;
int B[N],A[M][N][N],pA[M][N][N];
unordered_map<ll,int>T;
inline void read(ll&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline void mul(int a[][N],int b[][N],int c[][N]){
rep(k)rep(j)if(b[k][j])rep(i)if(a[i][k])c[i][j]=(1LL*a[i][k]*b[k][j]+c[i][j])%P;
}
inline int get(ll t){
int x=0,*a=pA[t/lim][3],(*b)[N]=A[t%lim];
rep(i){
int y=0;
rep(j)y=(1LL*a[j]*b[j][i]+y)%P;
x=(1LL*y*B[i]+x)%P;
}
return x;
}
inline int ask(int x,int y){
if(x>n||y>m)return P;
ll t=1LL*(x-1)*m+y;
if(T.find(t)!=T.end())return T[t];
return get(t);
}
void write(int x){
if(x>=10)write(x/10);
putchar(x%10+'0');
}
int main(){
rep(i)A[0][i][i]=pA[0][i][i]=1;
A[1][0][1]=1;
A[1][1][0]=A[1][1][1]=1,A[1][1][2]=2;
A[1][2][1]=A[1][2][2]=1;
A[1][3][1]=A[1][3][3]=1;
scanf("%d%d%d%d%d%d",&n,&m,&q,&P,&C1,&C2);
B[0]=B[3]=1LL*C1*C1%P;
B[1]=1LL*C2*C2%P;
B[2]=1LL*C1*C2%P;
lim=n>m?n:m;
for(i=2;i<=lim;i++)mul(A[i-1],A[1],A[i]);
for(i=1;i<=lim;i++)mul(pA[i-1],A[lim],pA[i]);
for(i=1;i<=q;i++){
ll x,y;
read(x),read(y);
if(T.find(x)==T.end())T[x]=get(x);
if(T.find(y)==T.end())T[y]=get(y);
swap(T[x],T[y]);
}
for(i=x=y=1,o=ask(1,1);i<n+m-1;i++){
write(o),putchar(' ');
d=ask(x+1,y),r=ask(x,y+1);
if(d<=r)x++,o=d;else y++,o=r;
}
return write(o),0;
}

  

BZOJ4471 : 随机数生成器Ⅱ的更多相关文章

  1. 【原创】开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器

                   本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新  开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...

  2. 【BZOJ-3122】随机数生成器 BSGS

    3122: [Sdoi2013]随机数生成器 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1362  Solved: 531[Submit][Sta ...

  3. BZOJ-2875 随机数生成器 矩阵乘法快速幂+快速乘

    题目没给全,吃X了... 2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1479 Solved: 829 ...

  4. [BZOJ3671][UOJ#6][NOI2014]随机数生成器

    [BZOJ3671][UOJ#6][NOI2014]随机数生成器 试题描述 小H最近在研究随机算法.随机算法往往需要通过调用随机数生成函数(例如Pascal中的random和C/C++中的rand)来 ...

  5. NOI2014 随机数生成器

    随机数生成器 [问题描述] 小H最近在研究随机算法.随机算法往往需要通过调用随机数生成函数(例如Pascal中的random和C/C++中的rand)来获得随机性.事实上,随机数生成函数也并不是真正的 ...

  6. 【BZOJ 3122】 [Sdoi2013]随机数生成器 (BSGS)

    3122: [Sdoi2013]随机数生成器 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1442  Solved: 552 Description ...

  7. Linux下对拍脚本与随机数生成器

    对拍脚本 新建一个文档 check.sh 作为对拍脚本. #!/bin/bash while(true)do #死循环 ./data > .in #运行数据生成器,将数据输出到1.in ./st ...

  8. 矩阵(快速幂):COGS 963. [NOI2012] 随机数生成器

    963. [NOI2012] 随机数生成器 ★★   输入文件:randoma.in   输出文件:randoma.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] 栋 ...

  9. 解密随机数生成器(二)——从java源码看线性同余算法

    Random Java中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linear congruential formula线性同余方程(Donald Knuth的编程艺术 ...

随机推荐

  1. LNMP平台搭建---Linux系统安装篇

    在互联网网站开发领域,有一个名词,大家一定不陌生,那就是LAMP,经典的Web服务器环境,由Linux+Apache+MySQL+PHP组成,,后来,一个名叫Nginx的Web服务器开源出来了,因其更 ...

  2. hud 1019最小公倍数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1019 思路:头两个数先求,再用所求的数与后面的一个数求,依次类推 #include<stdlib ...

  3. MyEclipse破解(MEGen.java)

    步骤: 1.将MEGen.java粘贴到任意web项目下,运行结果如下: 2.输入注册名:如sun,得到注册码: 3.Window  >>  Preference  >>  S ...

  4. 有关Oracle数据库

    创建数据库(DCA):http://jingyan.baidu.com/article/cbcede07cf42ef02f40b4dc2.html 创建表(连接数据库,sql创建数据表):http:/ ...

  5. weblogic监控

    http://wenku.baidu.com/link?url=tQPQ-dgm7NOkEGj_vemwtsPd6TJ6W3x6_0UBLgw61N982SwPlz-QFxqncsmPGqHwJAEF ...

  6. Linux系统入门学习:在curl中设置自定义的HTTP头

    http://www.linuxidc.com/Linux/2015-02/114220.htm

  7. ASP.NET Web Api 安全性(转载)

    转载地址:http://www.cnblogs.com/fzrain/p/3552423.html 在Web Api中强制使用Https 我们可以在IIS级别配置整个Web Api来强制使用Https ...

  8. 【转载】pyqt QTableWidget的使用

    转载地址: http://blog.sina.com.cn/s/blog_9b78c91101019sgi.html QTableWidget是QT程序中常用的显示数据表格的空间,很类似于VC.C#中 ...

  9. 说说JSON和JSONP,也许你会豁然开朗,含jQuery用例 分类: JavaScript 2014-09-23 10:41 218人阅读 评论(1) 收藏

    前言: 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Sock ...

  10. PHP数组合并的常见问题

    一维数组的合并 <?php $arr1=array("a","b","c"); $arr2=array("c",& ...