(线段树) P4588 数学计算
小豆现在有一个数 x,初始值为 1。小豆有 QQ 次操作,操作有两种类型:
1 m:将 x变为 x × m,并输出 x mod M
2 pos:将 x 变为 x 除以第 pos次操作所乘的数(保证第 pos 次操作一定为类型 1,对于每一个类型 1 的操作至多会被除一次),并输出 x mod M。
第一眼真的看不出来是个线段树的题,仔细思考看题解后才明白思路,以时间为轴,创建以每次操作次数为叶子节点的线段树,每次操作只需更改叶子
节点的值,最终pushup上去后,tr[1]就是我们要找的x的值
1 # include<iostream>
2 # include<algorithm>
3 # include<cstring>
4 # define int long long
5 # define endl "\n"
6 using namespace std;
7 const int N = 1e5+10;
8 int n,m;
9 struct node{
10 int l,r;
11 int v;
12 }tr[4*N];
13
14 void pushup(int u){
15 tr[u].v =( tr[u<<1|1].v*tr[u<<1].v)%m;/*向上更新父节点的值*/
16 }
17
18 void build(int u,int l,int r){
19 tr[u].l = l,tr[u].r = r;
20 if(l == r){
21 tr[u].v = 1;/*初始化所有操作值初始为 1 */
22 return;
23 }
24 int mid = l+r>>1;
25 build(u<<1,l,mid),build(u<<1|1,mid+1,r);
26 pushup(u);
27 }
28
29 void modify(int u,int x,int v){
30 if(tr[u].l == x && tr[u].r == x){
31 tr[u].v = (tr[u].v*v)%m;
32 return;
33 }
34 int mid = tr[u].l+tr[u].r>>1;
35 if(x<=mid) modify(u<<1,x,v);
36 else modify(u<<1|1,x,v);
37 pushup(u);
38 }
39
40 void remodify(int u,int x){
41 if(tr[u].l == x && tr[u].r == x){
42 tr[u].v = 1;
43 return;
44 }
45 int mid = tr[u].l+tr[u].r>>1;
46 if(x<=mid) remodify(u<<1,x);
47 else remodify(u<<1|1,x);
48 pushup(u);
49 }
50
51
52 int tt;
53 void solve(){
54 cin>>n>>m;
55 // memset(tr,0,sizeof tr);
56 build(1,1,n);
57 int kk = 0;/*记录一下操作次数*/
58 while(n--){
59 int op,v;
60 cin>>op>>v;
61 kk++;
62 if(op == 1){
63 modify(1,kk,v);
64 cout<<(tr[1].v)%m<<endl;
65 }
66 else{
67 remodify(1,v);
68 cout<<(tr[1].v)%m<<endl;
69 }
70 }
71
72 }
73 signed main(){
74 ios::sync_with_stdio(false);
75 cin.tie(0);
76 cout.tie(0);
77 cin>>tt;
78 while(tt--) solve();
79
80 return 0;
81 }
在乘的时候有可能爆int,所以要边乘边取模,开long long
(线段树) P4588 数学计算的更多相关文章
- HDU 1166 敌兵布阵 【线段树-点修改--计算区间和】
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- bzoj4821 && luogu3707 SDOI2017相关分析(线段树,数学)
题目大意 给定n个元素的数列,每一个元素有x和y两种元素,现在有三种操作: \(1\ L\ R\) 设\(xx\)为\([l,r]\)的元素的\(x_i\)的平均值,\(yy\)同理 求 \(\fra ...
- HDU 1828 线段树+扫描线(计算矩形周长并)
题意:给你n个矩形,然后矩形有可能重叠,要你求周长 思路:首先碰到这种矩形在数轴上那么第一反应应该想到的是扫描线, 做周长我们有两种方法 第一种,我们可以分开两部分求,第一遍求x轴上的贡献,第二遍求y ...
- HAOI2012高速公路bzoj2752 (线段树,数学)
题目大意: 给定一个长度为n的链,一共m次操作 对于每次操作 \(C\ l\ r\ x\)表示将第l个点到第r个点之间的所有道路的权值增加v \(Q\ l\ r\)在第l个到第r个点里等概率随机取出两 ...
- POJ 1151 线段树+扫描线(计算矩形面积并)
前一篇博客有了讲解就不再叙述了 #include<cstdio> #include<cstring> #include<cmath> #include<ios ...
- loj2163 / bzoj2212 / P3521 [POI2011]ROT-Tree Rotations(线段树合并)
P3521 [POI2011]ROT-Tree Rotations loj2163 [POI2011]ROT-Tree Rotations(数据加强) (loj的数据套了个fread优化才过...) ...
- CodeForces 834D The Bakery(线段树优化DP)
Some time ago Slastyona the Sweetmaid decided to open her own bakery! She bought required ingredient ...
- luogu P3899 [湖南集训]谈笑风生 线段树合并
Code: #include<bits/stdc++.h> #define maxn 300002 #define ll long long using namespace std; vo ...
- [FJOI2015]火星商店问题(线段树分治,可持久化,Trie树)
[FJOI2015]火星商店问题 前天考了到线段树分治模板题,全场都切了,就我不会QAQ 于是切题无数的Tyher巨巨就告诉我:"你可以去看看火星商店问题,看了你就会了." 第一道 ...
随机推荐
- JavaScript基础回顾知识点记录1
js执行顺序为从上往下执行 js中有6种数据类型 基本数据类型为: String Number Boolean Null Undefined 引用数据类型为: Object 使用typeof 查看对象 ...
- 使用自定义隐式转换快速创建失败Result
系统要求方法都返回 Result 结果,通常我们会如此定义一个 Result 1 public class Result<T> 2 { 3 public virtual int Code ...
- 离线方式安装高可用RKE2 (版本: v1.22.13+rke2r1)记录
说明: 想要了解RKE2可以到官网(https://docs.rke2.io 或 https://docs.rancher.cn/docs/rke2/_index/)看最新资料 用官网给出的离线安装( ...
- KingbaseES V8R6 维护管理案例之---Kstudio在CentOS 7启动故障
案例说明: 在CentOS 7上安装KingbaseES V8R6C006数据库后,启动Kstudio图形界面启动失败,gtk动态库加载失败,安装gtk相关动态库后,问题解决. 适用版本: Kin ...
- windows清理必看
清理缓存 代码如下 介绍此文件夹都是缓存文件全选删除即可 ctrl+A全选shift+del强制删除(不会添加到回收站) %temp% 找到C盘右击属性选择想要删除的文件进行清理即可 清理完点击清理系 ...
- 痞子衡嵌入式:理解i.MXRT中FlexSPI外设lookupTable里配置访问行列混合寻址Memory的参数值
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT中FlexSPI外设lookupTable里配置访问行列混合寻址Memory的参数值. 关于 FlexSPI 外设的 loo ...
- 添加 K8S CPU limit 会降低服务性能
文章转载自:https://mp.weixin.qq.com/s/cR6MpQu-n1cwMbXmVaXqzQ
- logstash处理字段样例
- 通过Metricbeat实现外部对Elastic Stack的监控
对于Elastic Stack监视的所有用户,建议使用外部数据收集. 概括一下: 关闭Elastic Stack自带的监控功能,然后使用metricbeat收集Elastic Stack数据传输到另外 ...
- 索引模板和动态索引模板 (Index Template和Dynamic Template)
相关阅读 Index Templates https://www.elastic.co/guide/en/elasticsearch/reference/7.1/indices-templates.h ...