原题传送门

这题是线段树的模板题

显而易见,直接模拟是不好模拟的(取模后就不好再除了)

我们按照时间来建一颗线段树

线段树初始值都为1,用来维护乘积

第一种操作就在当前时间所对应的节点上把乘数改成m

第二种操作就是把第pos个节点的乘数该回1

每次询问的答案就是线段树根节点维护的数值(pushup时要取模)

#include <bits/stdc++.h>
#define N 100005
#define ll long long
#define getchar nc
using namespace std;
inline char nc(){
static char buf[100000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline ll read()
{
register ll x=0,f=1;register char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*f;
}
inline void write(register int x)
{
if(!x)putchar('0');if(x<0)x=-x,putchar('-');
static int sta[20];register int tot=0;
while(x)sta[tot++]=x%10,x/=10;
while(tot)putchar(sta[--tot]+48);
}
int n;
ll mod;
struct SegmentTree{
ll mul[N<<3];
inline void init(register int x,register int l,register int r)
{
mul[x]=1;
if(l==r)
return;
int mid=l+r>>1;
init(x<<1,l,mid);
init(x<<1|1,mid+1,r);
}
inline void pushup(register int x)
{
mul[x]=mul[x<<1]*mul[x<<1|1]%mod;
}
inline void update(register int x,register int l,register int r,register int pos,register int v)
{
if(l==r)
{
mul[x]=v;
return;
}
int mid=l+r>>1;
if(pos<=mid)
update(x<<1,l,mid,pos,v);
else
update(x<<1|1,mid+1,r,pos,v);
pushup(x);
}
}tr;
int main()
{
int T=read();
while(T--)
{
n=read(),mod=read();
tr.init(1,1,n);
for(register int i=1;i<=n;++i)
{
int opt=read();
ll x=read();
if(opt==1)
tr.update(1,1,n,i,x);
else
tr.update(1,1,n,x,1);
write(tr.mul[1]),puts("");
}
}
return 0;
}

【题解】Luogu P4588 [TJOI2018]数学计算的更多相关文章

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

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

  2. [洛谷P4588][TJOI2018]数学计算

    题目大意:有一个数$x$和取模的数$mod$,初始为$1$,有两个操作: $m:x=x\times m$并输出$x\% mod$ $pos:x=x/第pos次操作乘的数$(保证合法),并输出$x\%m ...

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

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

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

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

  5. [Tjoi2018]数学计算

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

  6. BZOJ5334: [Tjoi2018]数学计算

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

  7. 题解【洛谷P4588】[TJOI2018]数学计算

    题目描述 小豆现在有一个数\(x\),初始值为\(1\).小豆有\(Q\)次操作,操作有两种类型: \(1\;m\):\(x=x\times m\)输出\(x\%mod\); \(2\;pos\):\ ...

  8. BZOJ5334:[TJOI2018]数学计算——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5334 小豆现在有一个数x,初始值为1. 小豆有Q次操作,操作有两种类型:  1 m: x = x ...

  9. TJOI2018 数学计算 题解

    题目 小豆现在有一个数 \(x\) ,初始值为 \(1\) . 小豆有 \(Q\) 次操作,操作有两种类型: \(m\): \(x=x×m\),输出 \(x\mod M\) : \(pos\): \( ...

随机推荐

  1. 怎么用js编写1——100的质数?

    这里来自csdn问答的一个问题,怎么用js编写1——100的质数? http://ask.csdn.net/questions/214429 质数也就是素数,即只能被1和自身整除的数,因此可以构造循环 ...

  2. mysql中的事物处理

    首先,事物的概念,保证一组sql语句操作的完整性,在这个过程中要充分考虑到多用户同时访问数据库数据的情况. 关键词有COMMIT,ROLLBACK,,START TRANSACTION

  3. 剑指offer——python【第53题】表示数值的字符串

    题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123","3.1 ...

  4. kubernetes组成

    kubernetes组成 k8s主要包括: kubectl 客户端命令行工具: 将接收的命令,发送给kube-apiserver,作为对整个平台操作的入口. kube-apiserver REST A ...

  5. 分库分表、读写分离——用Sql和ORM(EF)来实现

    分库:将海量数据分成多个库保存,比如:2017年的订单库——Order2017,2018年的订单库——Order2018... 分表:水平分表(Order拆成Order1.....12).垂直分表(O ...

  6. SQL[Err] ORA-00979: not a GROUP BY expression

    Oracle中group by用法 not a GROUP BY expression异常产生是因为group by用法的问题. 在使用group by 时,有一个规则需要遵守,即出现在select列 ...

  7. python基础(12)-包的导入&异常处理

    包的导入 几种导入方式 import 包名 import time time.time() import 包名,包名 import time,sys time.time() sys.path from ...

  8. linux 通过pid 寻找程序路径的最简单命令(pwdx)

    在linux实际操作命令中,查看pid的方式有很多种,通过pid找程序路径的方式也有好几个,但是可能大家都忽略的一个很简单也是很实用的命令:pwdx. 比如要查找某个java编写的程序运行情况可通过j ...

  9. 小程序 切换到tabBar页面不刷新问题

    小程序跳转的几种方式有wx.navigateTo,wx.redirectTo,wx.reLaunch,wx.switchTab等.下面我们重点研究切换到tabBar的两种方式. wx.switchTa ...

  10. iOS开发笔记错误集

    错误类型列举 错误类型A:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) 错误类型B:EXC_BREAKPOINT (code=EXC_A ...