博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ5334:[TJOI2018]数学计算——题解
阅读量:7231 次
发布时间:2019-06-29

本文共 1341 字,大约阅读时间需要 4 分钟。

小豆现在有一个数x,初始值为1. 小豆有Q次操作,操作有两种类型: 
1 m: x = x  *  m ,输出 x%mod;
2 pos: x = x /  第pos次操作所乘的数(保证第pos次操作一定为类型1,对于每一个类型1 的操作至多会被除一次),输出x%mod

都懒得写题解了……就对着时间建一个线段树,区间维护乘积即可。

真·大水题。

#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int Q=1e5+5;inline ll read(){ ll X=0,w=0;char ch=0; while(!isdigit(ch)){w|=ch=='-';ch=getchar();} while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar(); return w?-X:X;}int q;ll p,tr[Q*4];inline void upt(int a){tr[a]=tr[a<<1]*tr[a<<1|1]%p;}void build(int a,int l,int r){ if(l==r){ tr[a]=1;return; } int mid=(l+r)>>1; build(a<<1,l,mid);build(a<<1|1,mid+1,r); upt(a);}void mdy(int a,int l,int r,int x,ll y){ if(l==r){ tr[a]=y; return; } int mid=(l+r)>>1; if(x<=mid)mdy(a<<1,l,mid,x,y); else mdy(a<<1|1,mid+1,r,x,y); upt(a);}int main(){ int T=read(); while(T--){ q=read(),p=read(); build(1,1,q); for(int i=1;i<=q;i++){ int op=read(); if(op==1){ ll m=read(); mdy(1,1,q,i,m); }else{ int pos=read(); mdy(1,1,q,pos,1); } printf("%lld\n",tr[1]); } } return 0;}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客: +

+++++++++++++++++++++++++++++++++++++++++++

转载于:https://www.cnblogs.com/luyouqi233/p/9059259.html

你可能感兴趣的文章
warning: control reaches end of non-void function
查看>>
Tkinter, a Gui for python
查看>>
android开发之webservice介绍
查看>>
纯js页面跳转整理
查看>>
目标:嗯,每天进步一点点,每周坚持写一点
查看>>
ros 安装教程
查看>>
使用charles抓包https,配置了证书,还是乱码的解决方案
查看>>
Javascript的this用法
查看>>
解决nginx 504 Gateway Time-out的一些方法
查看>>
SQL游标循环执行(又遇到了,记录一下吧)
查看>>
jQuery上注册函数的方法
查看>>
不要将@Autowired注解用于static方法
查看>>
关于达内培训的名企定制班
查看>>
Routing with restify and socket.io in node
查看>>
立体测距
查看>>
关于离线下载的一些免费的网站
查看>>
开发netfilter的一些坑
查看>>
java中map的clear和new性能对比
查看>>
macbook 备份系统
查看>>
klish 安装与使用
查看>>