题目内容

小豆现在有一个数\(x\),初始值为\(1\)。小豆有\(Q\)次操作,操作有两种类型:

1 m:\(x=x×m\),输出\(x\ mod\ M\);

2 pos:\(x=x/\)第\(pos\)次操作所乘的数(保证第\(pos\)次操作一定为类型\(1\),对于每一个类型\(1\)的操作至多会被除一次),输出\(x\ mod\ M\)。

输入格式

一共有\(t\)组输入。

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

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

输出格式

对于每一个操作,输出一行,包含操作执行后的\(x\ mod\ M\)的值

数据范围

对于\(20\%\)的数据,\(1≤Q≤500\);

对于\(100\%\)的数据,\(1≤Q≤105\),\(t≤5\),\(M≤109\)。

样例

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

思路

线段树+单点修改。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
int Mod;
ll ans[maxn<<2]; void build(int x,int l,int r){
ans[x]=1ll;
if(l==r) return;
int mid=l+r>>1;
build(x<<1,l,mid);
build(x<<1|1,mid+1,r);
} void modify(int x,int l,int r,int p,int q){
if(l==r){
ans[x]=(ll)q%Mod;
return;
} int mid=l+r>>1;
if(p<=mid)modify(x<<1,l,mid,p,q);
else modify(x<<1|1,mid+1,r,p,q);
ans[x]=ans[x<<1]*ans[x<<1|1]%Mod;
} int main(){
int T,q,p,x;
scanf("%d",&T); while(T--){
scanf("%d%d",&q,&Mod);
build(1,1,q); for(int i=1;i<=q;i++){
scanf("%d%d",&p,&x);
if(p==1)modify(1,1,q,i,x);
else modify(1,1,q,x,1);
printf("%lld\n",ans[1]);
}
} return 0;
}

最新文章

  1. 【Python全栈笔记】05 [模块二] 19 Oct 文件的操作
  2. namespace std
  3. ***redis linux 命令使用总结
  4. 【推荐】JavaScript的那些书
  5. Linux中的终端、控制台、tty、pty等概念
  6. 使用GitHub For Windows托管Visual Studio项目
  7. codeforces C. Little Pony and Expected Maximum
  8. Error on SVN checkout:SSL handshake failed
  9. Uva 11694 Gokigen Naname
  10. Hadoop-2.2.0中国文献—— Web应用代理
  11. wordpress 删除底部&quot;自豪地采用 WordPress&quot;
  12. erlang-string
  13. Linux 分区和目录
  14. FFmpeg入门,简单播放器
  15. Linux块设备驱动(一) _驱动模型
  16. mpvue学习笔记(二)
  17. python day18--面向对象,继承
  18. ABP框架系列之五十三:(Web-API-Controllers-Web-API-控制器)
  19. salesforce零基础学习(九十)项目中的零碎知识点小总结(三)
  20. 【SqlServer】SqlServer中的更新锁(UPDLOCK)

热门文章

  1. Java枚举解读
  2. django之安装和项目创建
  3. command三国杀开发日记20200915
  4. 抢先学鸿蒙(HarmonyOS)2.0,你就是下一个大咖!
  5. k8s应用机密信息与配置管理(九)
  6. IHttpClientFactory组件使用
  7. RabbitMQ Server安装及显示管理界面Installing on Windows
  8. 解决flutter 运行时:Waiting for another flutter command to release the startup lock...
  9. http走私攻击
  10. Git-使用Rebase合并分支