复杂度辣鸡没人权

疯狂爆oj

感觉要被众多uoj用户骂了

  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. #define LS ls[now]?ls[now]:(tr[++NODE]=stru(),ls[now]=NODE)
  4. #define RS rs[now]?rs[now]:(tr[++NODE]=stru(),rs[now]=NODE)
  5. #define mid (l+r>>1)
  6. using namespace std;
  7. int MOD,NODE,KEY,n,m,opt,l,r,x,y;
  8. int root[];
  9. int ls[],rs[],st[],L[],R[],X[],Y[];
  10. struct stru
  11. {
  12. long long k,b;
  13. stru()
  14. {
  15. k=;b=;
  16. }
  17. stru(int K,int B)
  18. {
  19. k=K;b=B;
  20. }
  21. } tr[],alb[];
  22. stru merge(stru x,stru y)
  23. {
  24. return stru(x.k*y.k%MOD,(x.b*y.k+y.b)%MOD);
  25. }
  26. bool is(stru p)
  27. {
  28. return(p.k!= || p.b!=);
  29. }
  30. void add(int now,int l,int r,int x,int y,int p,int q)
  31. {
  32. if(l==x && r==y)
  33. {
  34. tr[now]=merge(tr[now],stru(p,q));
  35. return;
  36. }
  37. if(is(tr[now]))
  38. {
  39. tr[LS]=merge(tr[LS],tr[now]);
  40. tr[RS]=merge(tr[RS],tr[now]);
  41. tr[now]=stru();
  42. }
  43. if(x<=mid) add(LS,l,mid,x,min(mid,y),p,q);
  44. if(y>mid) add(RS,mid+,r,max(mid+,x),y,p,q);
  45. }
  46. int read()
  47. {
  48. int x=;char c=getchar();
  49. while (c<''||c>'')c=getchar();
  50. while (c>=''&&c<='')x=x*+c-'',c=getchar();
  51. return x;
  52. }
  53. int main()
  54. {
  55. KEY=read();
  56. n=read();MOD=read();
  57. for(int i=;i<=n;i++)
  58. st[i]=read();
  59. m=read();
  60. int N=;
  61. int lastans=;
  62. for(int i=,j=,J=;i<=m;i++)
  63. {
  64. opt=read();l=read();r=read();x=read();
  65. if(KEY&)
  66. l^=lastans,r^=lastans;
  67. if(opt==)
  68. {
  69. y=read();
  70. L[++j]=l;R[j]=r;X[j]=x;Y[j]=y;
  71. if(j%N==)
  72. root[++J]=++NODE;
  73. add(root[J],,n,l,r,x,y);
  74. }
  75. if(opt==)
  76. {
  77. if(KEY&)
  78. x^=lastans;
  79. int k,K;ll ret=st[x];
  80. for(k=l;k%N!= && k<=r;k++)
  81. if(L[k]<=x && x<=R[k])
  82. ret=(ret*X[k]+Y[k])%MOD;
  83. if(k<=r)
  84. {
  85. for(K=k/N+;K*N<=r;K++)
  86. {
  87. int now=root[K],l=,r=n,top=;
  88. while(l<r)
  89. {
  90. if(is(tr[now]))
  91. alb[++top]=tr[now];
  92. if(x<=mid)
  93. now=LS,r=mid;
  94. else
  95. now=RS,l=mid+;
  96. }
  97. stru tem=tr[now];
  98. for(int i=top;i;i--)
  99. tem=merge(tem,alb[i]);
  100. // tem=que(root[])
  101. ret=(tem.k*ret+tem.b)%MOD;
  102. }
  103. for(k=(K-)*N+;k<=r;k++)
  104. if(L[k]<=x && x<=R[k])
  105. ret=(ret*X[k]+Y[k])%MOD;
  106. }
  107. printf("%d\n",ret);
  108. // puts("OK");
  109. lastans=ret;
  110. }
  111. }
  112. return ;
  113. }

uoj46玄学的更多相关文章

  1. UOJ46 玄学

    题目 一个比较自然的想法是线段树维护二进制分组. 因为我们询问的是一段连续的操作的积,所以我们可以建一棵线段树,每个节点存储当前区间各个操作的积. 这里的操作的积指的是把一系列操作做完之后区间每个位置 ...

  2. 【BZOJ3821/UOJ46】玄学(二进制分组,线段树)

    [BZOJ3821/UOJ46]玄学(二进制分组,线段树) 题面 BZOJ UOJ 题解 呜,很好的题目啊QwQ. 离线做法大概可以线段树分治,或者直接点记录左右两次操作时的结果,两个除一下就可以直接 ...

  3. [UOJ46][清华集训2014]玄学

    uoj description 给出\(n\)个变换,第\(i\)个变换是将区间中\(l_i,r_i\)的数\(x\)变成\((a_ix+b_i)\mod m\). 每次会新增一个变换,或者查询询问如 ...

  4. UOJ46. 【清华集训2014】玄学

    传送门 Sol 考虑对于操作时间建立线段树,二进制分组 那么现在主要的问题就是怎么合并信息 你发现一个性质,就是每个修改只会在整个区间内增加两个端点 那么我们二进制分组可以得到每个区间内最多只有区间长 ...

  5. UOJ46. 【清华集训2014】玄学 [线段树,二进制分组]

    UOJ 思路 模拟赛出了这题,结果我没学过二进制分组--一波主席树然后空间就爆炸了-- 用线段树维护时间序列,每个节点维护\(a_i\to x_i\times a_i+b_i,i\in [1,n]\) ...

  6. UOJ46 清华集训2014玄学(线段树)

    注意到操作有结合律,容易想到用一个矩形表示第i次操作对第j个位置的数的影响.那么修改是单行内的区间修改,而查询是单列内的区间查询.这样二维线段树上以列为外层行为内层直接打标记就可以维护.然后就喜闻乐见 ...

  7. UOJ46 【清华集训2014】玄学 【时间线段树】

    题目链接:UOJ 这题的时间线段树非常的妙. 对时间建立线段树,修改的时候在后面加,每当填满一个节点之后就合并进它的父亲. 对于一个节点维护序列,发现这是一个分段函数,合并就是归并排序.于是就形成了差 ...

  8. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  9. C++玄学预编译优化

    #pragma GCC diagnostic error "-std=c++11" #pragma GCC optimize("-fdelete-null-pointer ...

随机推荐

  1. 纯CSS3左右滑动开关按钮

    纯CSS3特效左右滑动开关按钮是一款非常酷的CSS3 3D开关按钮,点击按钮可以左右滑动,就像开关打开闭合一样的效果. http://www.huiyi8.com/sc/10626.html

  2. linux启动全过程

    参考: http://www.staroceans.org/e-book/linux-bootstrap-1.html 1. MBR里的内容属于grub grub-2.02\grub-core\boo ...

  3. 机器视觉 之 Gabor Feature

    在机器视觉中,gabor feature是一种比较常见的特征,因为其可以很好地模拟人类的视觉冲击响应而被广泛应用于图像处理, gabor feature 一般是通过对图像与gabor filter做卷 ...

  4. 「LOJ#6121」「网络流 24 题」孤岛营救问题(BFS

    题目描述 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩.瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸好麦克得到了迷宫的地形图.迷宫的外形是一个长方形 ...

  5. UltraEdit注册机原理简单说明

    UltraEdit注册机原理 By:大志若愚 UltraEdit 是 Windows 下一款流行的老牌文本/HEX 编辑器(非开源).UltraEdit 正被移植到 Linux 平台.该移植名为 UE ...

  6. win10 安装nodejs,报错there is a problem in the windows installer package

    今天重装了win10系统,开始安装各种软件,装到node的时候我崩溃了,报错there is a problem in the windows installer package··· 度娘了各种安装 ...

  7. 性能测试之Jmeter学习(八)

    本节主要学习:断言 JMeter也有像LR中的检查点,本节就来介绍下JMeter的检查点如何去实现. JMeter里面的检查点通过添加断言来完成. 检查点:上一节讲到,我们对用户名和密码进行了参数化, ...

  8. 转:AppScan代理扫描app/H5安全测试

    1.首先设置AppScan代理,设置如下:

  9. xgene:WGS,突变与癌,RNA-seq,WES

     人类全基因组测序06 SNP(single nucleotide polymorphism):有了10倍以上的覆盖深度以后,来确认SNP信息,就相当可靠了. 一个普通黄种人的基因组,与hg19这个参 ...

  10. 1、CDH集群搭建

    一.准备工作 1.系统环境 系统centos6.5 节点三台: 192.168.1.130 192.168.1.131 192.168.1.132 1.所有节点关闭防火墙 service iptabl ...