~~~题面~~~

题解:

  ,,,考场上看到这题,没想到竟然是省选原题QAQ,考场上把它当数学题想了好久,因为不知道怎么处理有些数没有逆元的问题。。。。知道这是线段树后恍然大悟。

  首先可以一开始就建出一个长度为n的操作序列,初始值都是1,表示一开始默认是1乘上n个1,因为乘1也就相当于没乘。

  对于操作1,直接将操作序列上对应的位置单点修改为给定值,维护区间乘积。

  对于操作2,将序列上对应位置单点修改为1.

  查询直接查询线段树的根即可。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define R register int
  4. #define AC 401000
  5. #define LL long long
  6.  
  7. int n, p, w, go, T;
  8. int l[AC], r[AC];
  9. LL tree[AC];
  10.  
  11. inline int read()
  12. {
  13. int x = ;char c = getchar();
  14. while(c > '' || c < '') c = getchar();
  15. while(c >= '' && c <= '') x = x * + c - '', c = getchar();
  16. return x;
  17. }
  18.  
  19. void pre()
  20. {
  21. n = read(), p = read();
  22. }
  23.  
  24. void update(int x)
  25. {
  26. tree[x] = tree[x * ] * tree[x * + ] % p;
  27. }
  28.  
  29. void build(int x, int ll, int rr)
  30. {
  31. l[x] = ll, r[x] = rr;
  32. if(ll == rr)
  33. {
  34. tree[x] = ;
  35. return;
  36. }
  37. int mid = (ll + rr) >> ;
  38. build(x * , ll, mid);
  39. build(x * + , mid + , rr);
  40. update(x);
  41. }
  42.  
  43. void change(int x)
  44. {
  45. if(l[x] == r[x])
  46. {
  47. tree[x] = w;
  48. return ;
  49. }
  50. int mid = (l[x] + r[x]) >> ;
  51. if(go <= mid) change(x * );
  52. else change(x * + );
  53. update(x);
  54. }
  55.  
  56. void work()
  57. {
  58. T = read();
  59. while(T--)
  60. {
  61. pre();
  62. build(, , n);
  63. int opt;
  64. for(R i = ; i <= n; i ++)
  65. {
  66. opt = read();
  67. if(opt == )
  68. {
  69. w = read() % p, go = i;
  70. change();
  71. }
  72. else
  73. {
  74. w = , go = read();
  75. change();
  76. }
  77. printf("%lld\n", tree[]);
  78. }
  79. }
  80. }
  81.  
  82. int main()
  83. {
  84. freopen("in.in", "r", stdin);
  85. work();
  86. fclose(stdin);
  87. return ;
  88. }

[TJOI2018]数学计算 线段树的更多相关文章

  1. 洛谷P4588 [TJOI2018]数学计算(线段树)

    题意 题目链接 Sol TJOI怎么全是板子题 对时间开个线段树,然后就随便做了.... #include<bits/stdc++.h> using namespace std; cons ...

  2. BZOJ5334:[TJOI2018]数学计算(线段树)

    Description 小豆现在有一个数x,初始值为1. 小豆有Q次操作,操作有两种类型:  1 m: x = x  *  m ,输出 x%mod; 2 pos: x = x /  第pos次操作所乘 ...

  3. BZOJ5334: [Tjoi2018]数学计算

    BZOJ5334: [Tjoi2018]数学计算 https://lydsy.com/JudgeOnline/problem.php?id=5334 分析: 线段树按时间分治即可. 代码: #incl ...

  4. [Tjoi2018]数学计算

    [Tjoi2018]数学计算 BZOJ luogu 线段树分治 是不是想问为什么不暴力做? 模数没说是质数,所以不一定有逆元. 然后就是要每次build一下把线段树权值init成1, 博猪不知道为什么 ...

  5. [BZOJ5334][TJOI2018]数学计算(exgcd/线段树)

    模意义下除法若结果仍为整数的话,可以记录模数的所有质因子,计算这些质因子的次幂数,剩余的exgcd解决. $O(n\log n)$但有9的常数(1e9内的数最多有9个不同的质因子),T了. #incl ...

  6. BZOJ5334 [TJOI2018] 数学计算 【线段树分治】

    题目分析: 大概是考场上的签到题.首先mod不是质数,所以不能求逆元.注意到有加入操作和删除操作.一个很典型的想法就是线段树分治.建立时间线段树然后只更改有影响的节点,最后把所有标记下传.时间复杂度是 ...

  7. 洛谷P4588 [TJOI2018]数学计算 【线段树】

    题目链接 洛谷P4588 题解 用线段树维护即可 #include<algorithm> #include<iostream> #include<cstring> ...

  8. P4588 [TJOI2018]数学计算 (线段树)

    用线段树维护操作序列,叶子结点存要乘的数,非叶子结点存区间乘积,每次输出tr[1] 就是答案. 1 #include<bits/stdc++.h> 2 #define ll long lo ...

  9. 【题解】Luogu P4588 [TJOI2018]数学计算

    原题传送门 这题是线段树的模板题 显而易见,直接模拟是不好模拟的(取模后就不好再除了) 我们按照时间来建一颗线段树 线段树初始值都为1,用来维护乘积 第一种操作就在当前时间所对应的节点上把乘数改成m ...

随机推荐

  1. Java 使用Apache POI读取和写入Excel表格

    1,引入所用的包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxm ...

  2. you don't have permission to access forbidden

    前几天装一个phpStudy 集成环境,打开测试页面的时候突然出现如下错误: 有一些小总结. 一些小的开发测试在本地开发的话,直接localhost/file  就可以,  如果涉及到大的开发环境,一 ...

  3. 浅谈C#实现Web代理服务器的几大步骤

    代理服务程序是一种广泛使用的网络应用程序.代理程序的种类非常多,根据协议不同可以分成HTTP代理服务程序.FTP代理服务程序等,而运行代理服务程序的服务器也就相应称为HTTP代理服务器和FTP代理服务 ...

  4. 双击 ajax修改单元格里的值

    最终效果 列表页面表格里双击排序修改其值 按钮样式要引入bootstrap才可以用 本文件用的是laravel框架环境 larave路由里 Route::get('category/changesta ...

  5. video.js使用技巧

    https://www.awaimai.com/2053.html https://www.jianshu.com/p/16fa00a1ca8e

  6. python应用:主题分类(gensim lda)

    安装第三方包:gensim 首先,执行去停词操作(去除与主题无关的词) #-*-coding:utf8-*- import jieba def stopwordslist(filepath): sto ...

  7. 模块的使用与orm简介

    目录 1 django中app的概念: 2 模板路径配置: 3 静态文件配置: 4 完整版登录功能 5 get请求和post请求 6 新手三件套总结 7 pycharm连接mysql 8 orm介绍 ...

  8. 初识python 字符串 列表 字典相关操作

    python基础(一): 运算符: 算术运算: 除了基本的+ - * / 以外,还需要知道 :  // 为取整除 返回的市商的整数部分 例如: 9 // 2  ---> 4  , 9.0 //  ...

  9. 640. Solve the Equation

    class Solution { public: string solveEquation(string equation) { int idx = equation.find('='); , v1 ...

  10. linux文件操作篇 (一)文件属性与权限

    文件的属性和权限是linux中 目录 和 文件 的两个基本特性. #属性: . 所有者属性 . 访问权限属性   -rwxrwxr-x #第一个字符是文件类别 -表示 普通文件 d 表示目录 b 表示 ...