P4588 [TJOI2018]数学计算

刚看到这题根本每想到用线段树,直接每次记录计算结果然后找到要除的数字就好了呗
但是!你会注意到,如果连续乘很多很多次,然后再除的话,如果不取模会爆 long long 取模了,做除法结果就不对了,所以想到用线段树,以时间为轴建树,维护每个叶子节点为对应操作时间的乘数,做除法时将对应除数修改为 1 再查询区间乘即可。

#include<iostream>
#include<cstdio>
#define ll long long
#define lson p<<1
#define rson p<<1|1
#define mid s+((t-s)>>1)using namespace std;
const int maxn = 2e5+10;
ll tr[maxn<<2];
ll mod;inline void up(int p) {tr[p] = (tr[p*2]*tr[p*2+1])%mod;
} void build (int p, int s, int t) {if(s == t) {tr[p] = 1;return ;}build(lson, s, mid); build(rson, mid+1, t);up(p);
}void change(int l, int r, int s, int t, int k, int p) { // s, t 为大的二分区间 if(l <= s && r >= t) { // 修改区间 l = r (已经经过离散化了,将点离散成区间) tr[p] = k; // 单点修改 return ;}if(l <= mid) change(l, r, s, mid, k, lson);if(r > mid) change(l, r, mid+1, t, k, rson);up(p);
}int main() {//  freopen("test.in", "r", stdin);int T;scanf("%d", &T);while(T--) {int q, op, m;scanf("%d%lld", &q, &mod);build(1, 1, q); // 虽然除法的叶节点一定是1, 但是不确定哪些是除法,确保树叶够多 for(int i = 1; i <= q; i++) {scanf("%d%d", &op, &m);if(op == 1) {;change(i, i, 1, q, m, 1);tr[1] %= mod; // 最终的乘法结果维护在根节点 }else change(m, m, 1, q, 1, 1); // 找到 m 对应的叶节点,修改为 1printf("%lld\n", tr[1]%mod); }}return 0;
}

P4588 [TJOI2018]数学计算(线段树维护区间乘和单点修改)相关推荐

  1. Codeforces Round #742 (Div. 2) E. Non-Decreasing Dilemma (线段树维护区间连续问题)

    题意: 操作1:把x位置的数字修改成y. 操作2:查询[l,r]之间不下降序列的个数. 题解: 线段树维护区间和问题 (这是套路,想不到只能说做题少别打我) . 用五个变量进行维护. sum区间总个数 ...

  2. Can you answer these queries V SPOJ - GSS5 (分类讨论+线段树维护区间最大子段和)

    recursion有一个整数序列a[n].现在recursion有m次询问,每次她想知道Max { A[i]+A[i+1]+...+A[j] ; x1 <= i <= y1 , x2 &l ...

  3. 线段树维护区间最大值+第 45 届(ICPC)亚洲区域赛(昆明)L题Simone and Graph Coloring

    题意: 给你n个数的序列,当满足i<ji<ji<j andandand ai>aja_i>a_jai​>aj​时,这两个点之间有一条边,现在对点染色,要求每个点相邻 ...

  4. BZOJ1018 | SHOI2008-堵塞的交通traffic——线段树维护区间连通性+细节

    [题目描述] BZOJ1018 | SHOI2008-堵塞的交通traffic 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可 以被看成是一个2行C列 ...

  5. BZOJ-4811: [Ynoi2017]由乃的OJ (树链剖分 线段树维护区间操作值 好题)

    4811: [Ynoi2017]由乃的OJ Time Limit: 6 Sec  Memory Limit: 256 MB Submit: 366  Solved: 118 [Submit][Stat ...

  6. 【线段树-维护区间最小值和区间和】2021 ICPC网络赛第一场 D: Edge of Taixuan

    Problem D: Edge of Taixuan 评测传送门 (ps: 评测时需要先花费一个币买下题目集后方可进行提交并评测.) 题目大意: 给出 n n n个结点, m m m次操作,每次操作给 ...

  7. E. Sign on Fence(整体二分 + 线段树维护区间最大连续 1 的个数)

    E. Sign on Fence 给定一个长度为nnn的数组aaa,1≤ai≤1091 \leq a_i \leq 10 ^ 91≤ai​≤109,有mmm次询问,每次给定l,r,kl, r, kl, ...

  8. 【GDKOI2016Day1T1-魔卡少女】【拆位】线段树维护区间内所有连续子区间的异或和...

    题意:给出N个数,M个操作.操作有修改和询问两种,每次修改将一个数改成另一个数,每次询问一个区间的所有连续子区间的异或和.n,m<=100000,ai<=1000 题解: 当年(其实也就是 ...

  9. 线段树 ---- 2021牛客多校第一场 J Journey among Railway Stations [线段树维护区间可行性判断]

    题目链接 题目大意: 一段路上有 NNN 个点,每个点有一个合法时间段[ui,vi][u_i,v_i][ui​,vi​],相邻两个点有一个长度wiw_iwi​.有qqq次询问,每次询问,在 [ui,v ...

最新文章

  1. 随机森林是我最喜欢的模型
  2. python编程if语法-21天学习python编程_if语句
  3. C#异步编程的实现方式(1)——异步委托
  4. php写实体类,自动生成实体类(方式一)
  5. php中的echo单引号_PHP的数据类型
  6. SAP CRM BOL attribute_ref的merge逻辑调试
  7. 数据中心缩小是因为外包和云计算吗
  8. React 项目开发问题积累
  9. *【UVA - 10382】Watering Grass(贪心,区间覆盖问题,思维)
  10. 用终端访问路由器设置端口开发_网络故障排查最全总结!ONU、机顶盒、路由器常见网络问题及处理方法...
  11. 鸟哥的Linux私房菜之Linux 的文件权限与目录管理(一)
  12. android l x64,64位 Android L有9大亮点
  13. 图像处理-图像边缘处理
  14. 假期培训日记(数论)
  15. 东北大学秦皇岛分校通信工程中外合作2020级C语言实验3
  16. 阿里云nginx服务器多站点的配置
  17. 关于likely()与unlikely函数
  18. java计算机毕业设计Web网上购书后台管理系统(附源码、数据库)
  19. C++ :四种强制类型转换
  20. STM8L105 微妙 毫秒延时

热门文章

  1. 非常好用的Python图像增强工具,适用多个框架
  2. Myeclipse优化配置
  3. 22.加密与安全相关,证书申请CA(gpg,openssl)
  4. python基础-变量运算符(3)
  5. 算法 - 最好、最坏、平均复杂度
  6. RDS读写分离,海量数据一键搞定
  7. 2017(秋)软工作业: (2)硬币游戏—— 代码分析与改进
  8. 迭代var()内置函数的时候出现RuntimeError: dictionary changed size during iteration的解决办法...
  9. FBI很气愤:黑了CIA的熊孩子又回来了
  10. Python 排序的姿势,你们,你们还要学习..学习一个