数学计算 LibreOJ - 2573
题目描述
小豆现在有一个数 x ,初始值为 1 。 小豆有 Q 次操作,操作有两种类型:
1 m: x=x×m ,输出 xmodM ;
2 pos: x=x/ 第 pos 次操作所乘的数(保证第 pos 次操作一定为类型 1,对于每一个类型 1 的操作至多会被除一次),输出 xmodM 。
Input
一共有 t 组输入。
对于每一组输入,第一行是两个数字 Q,M 。
接下来 Q 行,每一行为操作类型 op ,操作编号或所乘的数字 m (保证所有的输入都是合法的)。
Output
对于每一个操作,输出一行,包含操作执行后的 xmodM 的值
Example
样例输入
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
Hint
对于 20% 的数据, 1≤Q≤500 ;
对于 100% 的数据, 1≤Q≤105,t≤5,M≤109 。
分析
这道题最简单的做法应该就是线段树了
对于第i次操作
如果是操作1,我们将编号为i的节点乘m,维护一个单点修改,最后输出区间乘积
如果是操作2,我们把编号为i的节点的权值改为1可以了,因为每一个节点只会修改一次,同样是输出区间乘积
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
ll m,mod,q;
struct tre{
ll l,r,val;
}tr[maxn<<2];
void push_up(ll da){
tr[da].val=(tr[da<<1].val%mod*tr[da<<1|1].val%mod);
}
void build(ll da,ll le,ll ri){
tr[da].l=le;
tr[da].r=ri;
if(le==ri){
tr[da].val=1;
return;
}
ll mids=(le+ri)>>1;
build(da<<1,le,mids);
build(da<<1|1,mids+1,ri);
push_up(da);
}
void gai(ll da,ll bh,ll w){
if(tr[da].l==tr[da].r){
tr[da].val=w%mod;
return;
}
ll mids=(tr[da].l+tr[da].r)>>1;
if(bh<=mids) gai(da<<1,bh,w);
else gai(da<<1|1,bh,w);
push_up(da);
}
void gai2(ll da,ll bh,ll w){
if(tr[da].l==tr[da].r){
tr[da].val=tr[da].val%mod*w%mod;
return;
}
ll mids=(tr[da].l+tr[da].r)>>1;
if(bh<=mids) gai(da<<1,bh,w);
else gai(da<<1|1,bh,w);
push_up(da);
}
ll qh(ll da,ll le,ll ri){
if(le<=tr[da].l && ri>=tr[da].r){
return tr[da].val%mod;
}
ll ans=1;
ll mids=(tr[da].l+tr[da].r)>>1;
if(le<=mids) ans=ans*qh(da<<1,le,ri)%mod;
if(ri>mids) ans=ans*qh(da<<1|1,le,ri)%mod;
return ans%mod;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%lld%lld",&q,&mod);
build(1,1,q);
for(ll i=1;i<=q;i++){
ll t;
scanf("%lld%lld",&t,&m);
if(t==1){
gai2(1,i,m);
printf("%lld\n",qh(1,1,i)%mod);
} else {
gai(1,m,1);
printf("%lld\n",qh(1,1,i)%mod);
}
}
}
return 0;
}
数学计算 LibreOJ - 2573的更多相关文章
- 理工科应该的知道的C/C++数学计算库(转)
理工科应该的知道的C/C++数学计算库(转) 作为理工科学生,想必有限元分析.数值计算.三维建模.信号处理.性能分析.仿真分析...这些或多或少与我们常用的软件息息相关,假如有一天你只需要这些大型软件 ...
- Shell之数学计算
本博客已经迁往http://www.kemaswill.com/, 博客园这边也会继续更新, 欢迎关注~ 数学计算是Shell中比较常用的一种操作, 但是因为shell中所有的变量都默认为字符串, ...
- Shell脚本笔记(三)shell中的数学计算
shell中的数学计算 一.使用方括号 #!/bin/bash a= b= c= res=$[$a * ($c-$b)] echo $res 二.使用(()) +)) ((i=+)) b=$((-*) ...
- C语言中几个常用数学计算函数ceil(), floor(), round()的用法
最近在实现算法的过程中,遇到了使用几个数学计算函数,感觉挺有意思,就记下来 方便以后使用. ceil(x)返回不小于x的最小整数值(然后转换为double型). floor(x)返回不大于x的最大整数 ...
- BZOJ 5334--[Tjoi2018]数学计算(线段树)
5334: [Tjoi2018]数学计算 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 220 Solved: 147[Submit][Status ...
- 【BZOJ5334】数学计算(线段树)
[BZOJ5334]数学计算(线段树) 题面 BZOJ 洛谷 题解 简单的线段树模板题??? 咕咕咕. #include<iostream> #include<cstdio> ...
- [LeetCode] 数学计算模拟类问题:加法,除法和幂,注意越界问题。题 剑指Offer,Pow(x, n) ,Divide Two Integers
引言 数学计算的模拟类题目,往往是要求实现某种计算(比如两数相除),实现的过程中会有所限定,比如不允许乘法等等. 这类题目首先要注意计算过程中本身的特殊情况.比如求相除,则必须首先反映过来除数不能为0 ...
- Math类的数学计算功能
//Math类的数学计算功能 public class MathTest { public static void main(String[] args) { /*----------下面是三角运算- ...
- bzoj 5334 数学计算
bzoj 5334 数学计算 开始想直接模拟过程做,但模数 \(M\) 不一定为质数,若没有逆元就 \(fAKe\) 掉了. 注意到操作 \(2\) 是删除对应的操作 \(1\) ,相当于只有 \(1 ...
随机推荐
- CICD | Jenkins & Gitlab集成:WebHook触发构建
在上一篇博客中,我们学习了Jenkins的搭建和插件+流水线的基本使用方法,Jenkins极大地提升了部署效率. 最近想学习一下如何集成GitLab webhook,实现进一步解放双手,目标: 推送( ...
- iOS -UIColor随机生成颜色的方法
在iOS 中的UIColor拥有这么多关于颜色的类方法,对于一般常见的UI控件,我们可以通过[UIColorblackColor]设置背景色 eg:设置button 的背景色为红色 UIButton ...
- 如何解决flutter中gradle慢的问题
初学flutter的时候,flutter run运行到有gradle的时候就停住不动了,研究后解决方法如下: 打开项目目录 中的 ...\myapp\android\gradle\wrapper\gr ...
- 【优雅写代码系统】springboot+mybatis+pagehelper+mybatisplus+druid教你如何优雅写代码
目录 spring基本搭建 整合mybatis pom配置 mybatis配置 设置数据源 设置sqlsessionfactory 设置扫描 设置开启事务 资源放行 测试 结果 思考&& ...
- ODEINT 求解常微分方程(2)
import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # function tha ...
- HashMap(二)之面试题系列
定义类考题 什么是Hash?什么是HashMap? HashMap 的工作原理是什么 HashMap HashTable的区别 为什么要用HashMap 源码类考题 什么是hash碰撞,怎么减少碰撞, ...
- Nice Jquery Validator 【从 jQuery Validation 迁移】
1. 初始化表单验证 .validate VS .validator jquery-validation : $("#myform").validate(options) nice ...
- Centos7下源编译安装Postgresql 并设置开机自动启动postgresql.serivce 服务相关研究
编写开机自动启动服务脚本: # cat >> /usr/lib/systemd/system/postgresql.service >> EOF [Unit] Descript ...
- Pants On Fire(链式前向星存图、dfs)
Pants On Fire 传送门:链接 来源:upc9653 题目描述 Donald and Mike are the leaders of the free world and haven't ...
- Communication【floyd判环+并查集】
Communication 题目链接(点击) 题目描述 The Ministry of Communication has an extremely wonderful message system, ...