嘟嘟嘟




这题没卡带一个\(log\)的,那么就很水了。

然后我因为好长时间没写矩阵优化dp,就只敲了一个暴力分……看来复习还是很关键的啊。




这个函数显然是从后往前递推的,那么令第\(i\)位的分子分母为\(x', y'\),第\(i + 1\)的为\(x, y\),因为\(f(i) = a_i + \frac{1}{f(i + 1)} = \frac{a_i * f(i + 1) + 1}{f(i + 1)}\),所以\(x' = a_i * x + y, y' = x\)。

这样我们把\(x, y\)看成\(f[i][0],f[i][1]\),就很容易构造矩阵了。




然后线段树维护矩阵即可。

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cmath>
  4. #include<algorithm>
  5. #include<cstring>
  6. #include<cstdlib>
  7. #include<cctype>
  8. #include<vector>
  9. #include<queue>
  10. #include<assert.h>
  11. #include<ctime>
  12. using namespace std;
  13. #define enter puts("")
  14. #define space putchar(' ')
  15. #define Mem(a, x) memset(a, x, sizeof(a))
  16. #define In inline
  17. #define forE(i, x, y) for(int i = head[x], y; ~i && (y = e[i].to); i = e[i].nxt)
  18. typedef long long ll;
  19. typedef double db;
  20. const int INF = 0x3f3f3f3f;
  21. const db eps = 1e-8;
  22. const int maxn = 1e6 + 5;
  23. const ll mod = 998244353;
  24. inline ll read()
  25. {
  26. ll ans = 0;
  27. char ch = getchar(), last = ' ';
  28. while(!isdigit(ch)) last = ch, ch = getchar();
  29. while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
  30. if(last == '-') ans = -ans;
  31. return ans;
  32. }
  33. inline void write(ll x)
  34. {
  35. if(x < 0) x = -x, putchar('-');
  36. if(x >= 10) write(x / 10);
  37. putchar(x % 10 + '0');
  38. }
  39. In void MYFILE()
  40. {
  41. #ifndef mrclr
  42. freopen(".in", "r", stdin);
  43. freopen(".out", "w", stdout);
  44. #endif
  45. }
  46. int n, m, N, cnt, T;
  47. In ll inc(ll a, ll b) {return a + b < mod ? a + b : a + b - mod;}
  48. #define LS t[now].ls
  49. #define RS t[now].rs
  50. struct Tree
  51. {
  52. int ls, rs;
  53. ll a[2][2];
  54. In Tree operator + (const Tree& oth)const
  55. {
  56. Tree ret; Mem(ret.a, 0);
  57. for(int i = 0; i < 2; ++i)
  58. for(int j = 0; j < 2; ++j)
  59. for(int k = 0; k < 2; ++k)
  60. ret.a[i][j] = inc(ret.a[i][j], a[i][k] * oth.a[k][j] % mod);
  61. return ret;
  62. }
  63. }t[maxn * 20];
  64. int tcnt = 0, root = 0;
  65. In void insert(int l, int r, int& now, int id, ll d)
  66. {
  67. if(!now) now = ++tcnt;
  68. if(l == r)
  69. {
  70. t[now].a[0][0] = d, t[now].a[1][1] = 0;
  71. t[now].a[1][0] = t[now].a[0][1] = 1;
  72. return;
  73. }
  74. int mid = (l + r) >> 1;
  75. if(id <= mid) insert(l, mid, LS, id, d);
  76. else insert(mid + 1, r, RS, id, d);
  77. int tp1 = LS, tp2 = RS;
  78. t[now] = t[LS] + t[RS];
  79. LS = tp1, RS = tp2;
  80. }
  81. In Tree query(int l, int r, int now, int L, int R)
  82. {
  83. if(l == L && r == R) return t[now];
  84. int mid = (l + r) >> 1;
  85. if(R <= mid) return query(l, mid, LS, L, R);
  86. else if(L > mid) return query(mid + 1, r, RS, L, R);
  87. else return query(l, mid, LS, L, mid) + query(mid + 1, r, RS, mid + 1, R);
  88. }
  89. int main()
  90. {
  91. // MYFILE();
  92. n = read(), m = read(), T = read();
  93. N = n + m, cnt = n;
  94. for(int i = 1; i <= cnt; ++i) insert(1, N, root, i, read());
  95. ll ansX = 0, ansY = 0;
  96. for(int i = 1; i <= m; ++i)
  97. {
  98. int op = read();
  99. if(op == 1)
  100. {
  101. int x = read();
  102. if(T) x ^= ansX ^ ansY;
  103. insert(1, N, root, ++cnt, x);
  104. }
  105. else
  106. {
  107. int L = read(), R = read();
  108. if(T) L ^= ansX ^ ansY, R ^= ansX ^ ansY;
  109. Tree tp = query(1, N, root, L, R);
  110. write(ansX = tp.a[0][0]), space, write(ansY = tp.a[1][0]), enter;
  111. }
  112. }
  113. return 0;
  114. }

「LibreOJ NOI Round #2」单枪匹马的更多相关文章

  1. 「LibreOJ NOI Round #2」不等关系

    「LibreOJ NOI Round #2」不等关系 解题思路 令 \(F(k)\) 为恰好有 \(k\) 个大于号不满足的答案,\(G(k)\) 表示钦点了 \(k\) 个大于号不满足,剩下随便填的 ...

  2. LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿

    二次联通门 : LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿 /* LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿 dp 记录一下前驱 ...

  3. 「LibreOJ NOI Round #1」验题

    麻烦的动态DP写了2天 简化题意:给树,求比给定独立集字典序大k的独立集是哪一个 主要思路: k排名都是类似二分的按位确定过程. 字典序比较本质是LCP下一位,故枚举LCP,看多出来了多少个独立集,然 ...

  4. #509. 「LibreOJ NOI Round #1」动态几何问题

    下面给出部分分做法和满分做法 有一些奇妙的方法可以拿到同样多的分数,本蒟蒻只能介绍几种常见的做法 如果您想拿18分左右,需要了解:质因数分解 如果您想拿30分左右,需要了解:一种较快的筛法 如果您想拿 ...

  5. #510. 「LibreOJ NOI Round #1」动态几何问题

    题目: 题解: 几何部分,先证明一下 \(KX = \sqrt{a},YL = \sqrt{b}\) 设左侧的圆心为 \(O\) ,连接 \(OK\) ,我们有 \(OK = r\). 然后有 \(r ...

  6. #507. 「LibreOJ NOI Round #1」接竹竿 dp

    题目: 题解: 我们考虑把每对花色相同的牌看作区间. 那么如果我们设 \(f_i\) 表示决策在 \([1,i]\) 内的最优答案. 那么有 \(f_i = max\{max\{(f_{j-1}+\s ...

  7. LOJ#510. 「LibreOJ NOI Round #1」北校门外的回忆(线段树)

    题面 传送门 题解 感谢\(@M\_sea\)的代码我总算看懂题解了-- 这个操作的本质就是每次把\(x\)的\(k\)进制最低位乘\(2\)并进位,根据基本同余芝士如果\(k\)是奇数那么最低位永远 ...

  8. LOJ 510: 「LibreOJ NOI Round #1」北校门外的回忆

    题目传送门:LOJ #510. 题意简述: 给出一个在 \(K\) 进制下的树状数组,但是它的实现有问题. 形式化地说,令 \(\mathrm{lowbit}(x)\) 为在 \(K\) 进制下的 \ ...

  9. LOJ575. 「LibreOJ NOI Round #2」不等关系 [容斥,分治FFT]

    LOJ 思路 发现既有大于又有小于比较难办,使用容斥,把大于改成任意减去小于的. 于是最后的串就长成这样:<<?<?<??<<<?<.我们把一段连续的& ...

随机推荐

  1. 全栈项目|小书架|服务器开发-Koa2 连接MySQL数据库(Navicat+XAMPP)

    为什么使用数据库 为什么需要数据库?-知乎 相比与文件系统,数据库具有以下优势: 高效率:查找效率高 高可用:可数据库共享 安全性强:数据不能随意修改 选择哪个数据库 数据库可以分为关系型数据库和非关 ...

  2. ESP8266 智能家居简单实现

    本文转自CSDN,地址 https://blog.csdn.net/jsagacity/article/details/78531819 全文如下 : 前段时间,公司利用 ESP8266 这个WiFi ...

  3. 原生JS获取HTML DOM元素的8种方法

    JS获取DOM元素的方法(8种) 通过ID获取(getElementById) 通过name属性(getElementsByName) 通过标签名(getElementsByTagName) 通过类名 ...

  4. CSS ID选择器&通配选择器

    ID选择器 ID(IDentity)是编号的意思,一般指定标签在HTML文档中的唯一编号.ID选择器和标签选择器.类选择器的作用范围不同. ID选择器仅仅定义一个对下对象的样式,而标签选择器和类选择器 ...

  5. Android里的Dalvik、ART、JIT、AOT有什么关系?

    JIT,Just-in-time,即时编译,边运行边编译: AOT,Ahead Of Time,提前编译,指运行前编译. 区别 这两种编译方式的主要区别在于是否在“运行时”进行编译 优劣JIT优点: ...

  6. Core Animation笔记(特殊图层)

    1.shapeLayer: 渲染快速,内存占用小,不会被图层边界裁掉(可以在边界之外绘制),不会像素化(当做3D变化如缩放是不会失真) CGRect rect = self.containerView ...

  7. Python学习日记(十二) 匿名函数

    匿名函数: 未解决一些简单的需求而设计的函数 语法: func = lambda x : x**2 func:函数名 lambda:类似def的关键字 x:参数 x**2:返回值表达式 适用内置函数: ...

  8. Linux下用的脚本

    http://blog.itpub.net/29510932/viewspace-1166603/ 批量启动Tomcat 点击(此处)折叠或打开 #!/bin/bash #JDK路径 export J ...

  9. [https][tls] 如何使用wireshark查看tls/https加密消息--使用私钥

    之前总结了使用keylog进行https流量分析的方法: [https][tls] 如何使用wireshark查看tls/https加密消息--使用keylog 今天总结一下使用服务器端证书私钥进行h ...

  10. CentOS7怎样安装Tomcat8.5.38

    cd /usr/local进入/usr/local目录 mkdir tomcat创建tomcat目录 cd tomcat进入tomcat目录 wget https://mirrors.tuna.tsi ...