当前位置:网站首页>Luogu P4588: [TJOI2018]数学计算
Luogu P4588: [TJOI2018]数学计算
2022-08-05 08:11:00 【9ack!?】
题目大意
题目大意是这样对于一个数字x,有若干种操作:
- 操作1是对x乘上一个数字m
- 操作2是让x第pos次的操作失效
每次操作后输出当前x对一个数字取模的值。这个问题乍一看挺简单,但是由于取模的数字不一定是质数,所以逆元也不能用了,暴力做法不行我们就思考一些巧妙的方法。通过时间当作下标来把这些m组织起来,再用线段树维护所有段的乘积,操作1就是把当前时间对应的值置为m,操作2就是把当前时间对应的值置为1。
由于每次都需要精确递归到长度为1的段,所以标记也不需要打,直接开干。
代码
#include <cstdio>
#include <algorithm>
using namespace std;
#define lc k<<1
#define rc k<<1|1
typedef long long ll;
const int maxn = 1e5+5;
ll a[maxn], f[maxn*4];
int q, M;
void build(int k, int l, int r) {
f[k] = 1;
if(l == r) return;
int m = (l+r) >> 1;
build(lc, l, m);
build(rc, m+1, r);
}
inline void mul(int k, int l, int r, int t, int p) {
if(l == r) {
f[k] = p; return; }
int m = (l+r) >> 1;
if(t <= m) {
mul(lc, l, m, t, p);
} else
mul(rc, m+1, r, t, p);
f[k] = (f[lc]*f[rc])%M;
}
inline void div(int k, int l, int r, int t) {
if(l == r) {
f[k] = 1; return; }
int m = (l+r) >> 1;
if(t <= m) {
div(lc, l, m, t);
} else
div(rc, m+1, r, t);
f[k] = (f[lc]*f[rc])%M;
}
int main(void)
{
freopen("in.txt", "r", stdin);
int t;
scanf("%d", &t);
while(t--) {
scanf("%d%d", &q, &M);
build(1, 1, q);
int op, p;
for(int i = 1; i <= q; ++i) {
scanf("%d%d", &op, &p);
if(op == 1) {
mul(1, 1, q, i, p);
} else {
div(1, 1, q, p);
}
printf("%lld\n", f[1]%M);
}
}
return 0;
}
边栏推荐
- Long-term recruitment embedded development-Shenzhen Baoan
- 【结构体内功修炼】枚举和联合的奥秘(三)
- Constellation ideal lover
- 力扣刷题八月第一天
- Random code generation
- 七夕看什么电影好?爬取电影评分并存入csv文件
- 数据源对象管理Druid和c3p0
- php fails to write data to mysql
- JVM运行流程,运行时数据区,类加载,垃圾回收,JMM解析
- [Repost] Marry a man must marry a man whose salary is at least 3571.4 yuan higher than yours
猜你喜欢
Embedded Systems: Basic Timers
ps怎么把图片变清晰,自学ps软件photoshop2022,简单快速用ps让照片更清晰更有质感
uniapp时间组件封装年-月-日-时-分-秒
Use of thread pool (combined with Future/Callable)
最 Cool 的 Kubernetes 网络方案 Cilium 入门教程
SVG星球大战样式Toggle切换开关按钮
Redis implements distributed lock-principle-detailed explanation of the problem
【结构体内功修炼】枚举和联合的奥秘(三)
Vulnhub target drone: HA_ NARAK
Fiddler tool explanation
随机推荐
Three solutions to solve cross-domain in egg framework
基于 Docker 快速使用远程(云)数据库
【深度学习实践(一)】安装TensorFlow
RedisTemplate: error template not initialized; call afterPropertiesSet() before using it
[Structural Internal Power Cultivation] Structural Realization Stages (2)
Redis缓存以及存在的问题--缓存穿透、缓存雪崩、缓存击穿及解决方法
How to make pictures clear in ps, self-study ps software photoshop2022, simple and fast use ps to make photos clearer and more textured
向美国人学习“如何快乐”
unity urp 渲染管线顶点偏移的实现
宝塔实测-搭建中小型民宿酒店管理源码
[转帖]嫁人一定要嫁工资至少比你高3571.4元的男士
[Untitled] Long-term recruitment of hardware engineers-Shenzhen Baoan
The Coolest Kubernetes Network Solution Cilium Getting Started Tutorial
The toss of MM before going to the street (interesting)
What is the connection and difference between software system testing and acceptance testing? Professional software testing solution recommendation
Qt编写自定义控件:文字聚光灯效果之一
Fiddler工具讲解
pnpm 是凭什么对 npm 和 yarn 降维打击的
nn.unfold和nn.fold
常用的遍历map的方法