BZOJ5334:[TJOI2018]数学计算——题解
2024-08-27 02:51:02
https://www.lydsy.com/JudgeOnline/problem.php?id=5334
小豆现在有一个数x,初始值为1. 小豆有Q次操作,操作有两种类型:1 m: x = x * m ,输出 x%mod;2 pos: x = x / 第pos次操作所乘的数(保证第pos次操作一定为类型1,对于每一个类型1 的操作至多会被除一次),输出x%mod
都懒得写题解了……就对着时间建一个线段树,区间维护乘积即可。
真·大水题。
#include<cmath>
#include<queue>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int Q=1e5+;
inline ll read(){
ll X=,w=;char ch=;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
int q;
ll p,tr[Q*];
inline void upt(int a){tr[a]=tr[a<<]*tr[a<<|]%p;}
void build(int a,int l,int r){
if(l==r){
tr[a]=;return;
}
int mid=(l+r)>>;
build(a<<,l,mid);build(a<<|,mid+,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)>>;
if(x<=mid)mdy(a<<,l,mid,x,y);
else mdy(a<<|,mid+,r,x,y);
upt(a);
}
int main(){
int T=read();
while(T--){
q=read(),p=read();
build(,,q);
for(int i=;i<=q;i++){
int op=read();
if(op==){
ll m=read();
mdy(,,q,i,m);
}else{
int pos=read();
mdy(,,q,pos,);
}
printf("%lld\n",tr[]);
}
}
return ;
}
+++++++++++++++++++++++++++++++++++++++++++
+本文作者:luyouqi233。 +
+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/ +
+++++++++++++++++++++++++++++++++++++++++++
最新文章
- JS表单前台校验模板
- 兼容90%标准C的词法分析器
- Android 采用get方式提交数据到服务器
- zend studio 使用总结
- 深入JVM-常用Java虚拟机参数
- js 网站顶部通用导航
- NODE学习:利用nodeJS去抓网页的信息
- bzoj3413
- ubuntu使用中的一些问题
- android 破解九宫格
- 《python源代码分析》笔记 pythonVM一般表达式
- 初学者---AngularJS详解
- LNMP下FTP服务器的安装和使用(Pureftpd和Proftpd)
- 通过sql查找指定字段存在哪些表中
- 利用saltstack批量安装clamav杀毒软件
- angular4-常用指令
- python java scala 单例模式
- 单片机程序在内存和FLASH中的空间分配
- Java面试题系列(二)Java内存模型
- Java之集合(二十)LinkedBlockingQueue
热门文章
- letsencrypt证书-管理工具certbot
- url和uri的一些问题
- Centos 7 快速安装 Docker
- Python 更换国内pip源
- 【SpringCloud】第六篇: 分布式配置中心(Spring Cloud Config)
- 【WXS】简要介绍说明
- Navicat和DBeaver的查询快捷键
- 41. Maximum Subarray
- halcon基础应用和方法经验分享
- vs2008 c#项目调试dll源码,问题:“若要调试此模块,请将其项目生成配置更改为“调试”模式” 的解决方案