描述

小豆现在有一个数 xxx ,初始值为 111 。 小豆有 QQQ 次操作,操作有两种类型:

111 $ m$ : x=x×mx=x×mx=x×m ,输出 xxx modmodmod MMM ;

$2 $ pospospos: x=x/x=x/x=x/ 第$ pos$ 次操作所乘的数(保证第 pospospos 次操作一定为类型 111,对于每一个类型 111 的操作至多会被除一次),输出 xxx modmodmod MMM 。

输入

一共有 ttt 组输入。

对于每一组输入,第一行是两个数字 Q,MQ,MQ,M。

接下来 QQQ 行,每一行为操作类型 opopop ,操作编号或所乘的数字 mmm (保证所有的输入都是合法的)。

输出

对于每一个操作,输出一行,包含操作执行后的xxx modmodmod MMM 的值。

样例输入

1

10 1000000000

1 2

2 1

1 2

1 10

2 3

2 4

1 6

1 7

1 12

2 7

样例输出

2

1

2

20

10

1

6

42

504

84

对于 2020%20的数据,$ 1\leq Q \leq 500 $ ;

对于 100100%100 的数据, 1≤Q≤105,t≤5,M≤1091\leq Q \leq 10^5 , t\leq 5 , M \leq 10^91≤Q≤105,t≤5,M≤109

这个题可以看出是一道用线段树维护根节点区间乘积的题,由于QQQ的值很小,所以可以设线段树的根节点的左右指针为T[1].l=1,T[1].r=QT[1].l=1,T[1].r=QT[1].l=1,T[1].r=Q,当最初没有修改时,所有叶子结点的值都为111,那么整个区间的乘积就为111,即题上的xxx,对于操作111,我们让第iii个叶节点对应第iii次操作,如果第iii次操作为操作111,那么我们将第iii个叶节点的值改为mmm,否则第iii次操作是操作222,此时我们只需要将第pospospos个根节点改回111即可。

具体的代码实现:

#include<bits/stdc++.h>
#define lc (p<<1)
#define rc (p<<1|1)
#define mid (T[p].l+T[p].r>>1)
#define N 100005
using namespace std;
int t,n;
long long mod;
inline long long read(){
	long long ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+ch-'0',ch=getchar();
	return ans;
}
struct Node{int l,r;long long mul;}T[N<<2];
inline void pushup(int p){T[p].mul=T[lc].mul*T[rc].mul%mod;}
inline void build(int p,int l,int r){
	T[p].l=l,T[p].r=r,T[p].mul=1;
	if(l==r)return;
	build(lc,l,mid);
	build(rc,mid+1,r);
}
inline void update(int p,int k,int v){
	if(T[p].l==T[p].r){
		T[p].mul=v;
		return;
	}
	if(k<=mid)update(lc,k,v);
	else update(rc,k,v);
	pushup(p);
}
int main(){
	t=read();
	while(t--){
		n=read(),mod=read();
		build(1,1,n);
		for(int i=1;i<=n;++i){
			int op=read();
			if(op==1){long long v=read();update(1,i,v);}
			else{int pos=read();update(1,pos,1);}
			printf("%lld\n",T[1].mul);
		}
	}
	return 0;
}

2018.06.26「TJOI2018」数学计算(线段树)的更多相关文章

  1. 「CQOI2006」简单题 线段树

    「CQOI2006」简单题 线段树 水.区间修改,单点查询.用线段树维护区间\([L,R]\)内的所有\(1\)的个数,懒标记表示为当前区间是否需要反转(相对于区间当前状态),下方标记时懒标记取反即可 ...

  2. LOJ2319. 「NOIP2017」列队【线段树】

    LINK 思路 神仙线段树 你考虑怎么样才能快速维护出答案 首先看看一条链怎么做? 首先很显然的思路是维护每个节点的是否出过队 然后对于重新入队的点 直接在后面暴力vector存一下就可以了 最核心的 ...

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

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

  4. 2018.11.01 loj#2319. 「NOIP2017」列队(线段树)

    传送门 唉突然回忆起去年去noipnoipnoip提高组试水然后省二滚粗的悲惨经历... 往事不堪回首. 所以说考场上真的有debuffdebuffdebuff啊!!!虽然当时我也不会权值线段树 这道 ...

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

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

  6. [TJOI2018]数学计算 线段树

    ---题面--- 题解: ,,,考场上看到这题,没想到竟然是省选原题QAQ,考场上把它当数学题想了好久,因为不知道怎么处理有些数没有逆元的问题....知道这是线段树后恍然大悟. 首先可以一开始就建出一 ...

  7. 「洛谷4197」「BZOJ3545」peak【线段树合并】

    题目链接 [洛谷] [BZOJ]没有权限号嘤嘤嘤.题号:3545 题解 窝不会克鲁斯卡尔重构树怎么办??? 可以离线乱搞. 我们将所有的操作全都存下来. 为了解决小于等于\(x\)的操作,那么我们按照 ...

  8. 「洛谷3870」「TJOI2009」开关【线段树】

    题目链接 [洛谷] 题解 来做一下水题来掩饰ZJOI2019考炸的心情QwQ. 很明显可以线段树. 维护两个值,\(Lazy\)懒标记表示当前区间是否需要翻转,\(s\)表示区间还有多少灯是亮着的. ...

  9. LOJ2255. 「SNOI2017」炸弹 (线段树)

    本文为线段树做法 (听说可以tarjan缩点+拓扑? 感觉差不多..而且这样看起来方便很多 找到左端点的过程可以看作 点 -> 区间内lowerbound最小的点 -> lowerboun ...

随机推荐

  1. 食物链(带权&种类并查集)

    食物链 http://poj.org/problem?id=1182 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9326 ...

  2. stm32阅读代码工具source insight

    不知道学stm32有没有这样的烦恼,想看一个项目的代码,但是用keil又发现建立工程太麻烦,单个打开文件又找不到函数和变量之间的依赖关系,变量和函数又不能高亮显示,linux下vim和emacs虽然很 ...

  3. TZOJ 1594 Optimal Milking(二分+最大流)

    描述 FJ has moved his K (1 <= K <= 30) milking machines out into the cow pastures among the C (1 ...

  4. require模块化载入

    1,模块化require的载入步骤 1,一个总文件夹,,里面三个子文件夹 ,, 分别是 2,common 里面是放一些公共方法和自己封装的方法     js里面是放自己的业务逻辑js文件和一些模块化的 ...

  5. python的定时任务模块--schedule

    首先先安装一下模块 下面我们简单的学习一下schedule模块 先简单的看个示例 import schedule def test(*args,**kwargs): print("hello ...

  6. sqlserver还原数据库失败,sql2008备份集中的数据库备份与现有的xxx数据库不同

    正常操作发现报标题错误,百度后解决思路如下(@参考文章)转到选项下面,勾选覆盖现有数据库即可

  7. 数字&字符串

    一.数字 数字分为整型(int)和浮点型(float) int(整型):整数数字 >>> a = 12 >>> a 12 >>> b = 12.3 ...

  8. VIO回顾:从滤波和优化的视角

    https://mp.weixin.qq.com/s/zpZERtWPKljWNAiASBLJxA 根据以上网页自己做的总结: 在机器人社区中,定位与构图问题属于状态估计问题.主流使用的工具可以对给定 ...

  9. datatable to entiy list 不支持可空类型和枚举类型

    还没有找到解决方法,暂存,希望有知道能告诉我.谢谢.

  10. .netcore webapi 在startup中读取配置字符串

    参考微软官方说明:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration 具体为: 读取方法见下图中标红的格式, ...