bzoj 5334 数学计算
bzoj 5334 数学计算
- 开始想直接模拟过程做,但模数 \(M\) 不一定为质数,若没有逆元就 \(fAKe\) 掉了.
- 注意到操作 \(2\) 是删除对应的操作 \(1\) ,相当于只有 \(1\) 操作,但每个操作有一个生效的时限.
- 将所有操作离线下来,用一颗线段树维护每个时间的答案.对于操作 \(1\) ,预处理出生效的时限后,区间修改那一段即可.注意有没有删除的情况,右端点设为 \(Q\) .
- 预处理结束后,对每个操作可以一边改一边做,后面的操作显然不会对这里的答案造成影响.
- 时间复杂度为 \(O(QlogQ)\) .
原来这东西是叫线段树分治.之前我就叫做是离线后线段树上乱搞...
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mp make_pair
#define pii pair<int,int>
inline int read()
{
int out=0,sgn=1;
char jp=getchar();
while(jp!='-' && (jp<'0' || jp>'9'))
jp=getchar();
if(jp=='-')
sgn=-1,jp=getchar();
while(jp>='0' && jp<='9')
out=out*10+jp-'0',jp=getchar();
return out*sgn;
}
const int MAXN=1e5+10;
int Q,P;
inline int mul(int a,int b)
{
return 1LL * a * b % P;
}
int fpow(int a,int b)
{
int res=1;
while(b)
{
if(b&1)
res=mul(res,a);
a=mul(a,a);
b>>=1;
}
return res%P;
}
struct query{
int op,m,r;
}q[MAXN];
namespace SEG{
struct node{
int l,r;
int prod,tag;
}Tree[MAXN<<2];
#define root Tree[o]
#define lson Tree[o<<1]
#define rson Tree[o<<1|1]
void BuildTree(int o,int l,int r)
{
root.l=l,root.r=r;
root.prod=1,root.tag=1;
if(l==r)
return;
int mid=(l+r)>>1;
BuildTree(o<<1,l,mid);
BuildTree(o<<1|1,mid+1,r);
}
void Modifiy(int o,int v)
{
root.prod=mul(root.prod,v);
root.tag=mul(root.tag,v);
}
void pushdown(int o)
{
if(root.tag!=1)
{
Modifiy(o<<1,root.tag);
Modifiy(o<<1|1,root.tag);
root.tag=1;
}
}
void update(int o,int L,int R,int v)
{
int l=root.l,r=root.r;
if(l>R || L>r)
return;
if(L<=l && r<=R)
{
Modifiy(o,v);
return;
}
pushdown(o);
update(o<<1,L,R,v);
update(o<<1|1,L,R,v);
}
int query(int o,int pos)
{
int l=root.l,r=root.r;
if(l==r)
return root.prod;
if(pos<l || pos>r)
return 1;
int mid=(l+r)>>1;
pushdown(o);
if(pos<=mid)
return query(o<<1,pos);
else
return query(o<<1|1,pos);
}
}
int main()
{
int T=read();
while(T--)
{
Q=read(),P=read();
for(int i=1;i<=Q;++i)
{
int op=read();
q[i].op=op;
if(op==1)
q[i].m=read(),q[i].r=Q+1;
else
{
int pos=read();
q[pos].r=i;
}
}
SEG::BuildTree(1,1,Q);
for(int i=1;i<=Q;++i)
{
if(q[i].op==1)
{
int l=i,r=q[i].r;
SEG::update(1,l,r-1,q[i].m);
int ans=SEG::query(1,l);
printf("%d\n",ans);
}
else
{
int ans=SEG::query(1,i);
printf("%d\n",ans);
}
}
}
return 0;
}
bzoj 5334 数学计算的更多相关文章
- 【线段树】BZOJ 5334 数学计算
题目内容 小豆现在有一个数\(x\),初始值为\(1\).小豆有\(Q\)次操作,操作有两种类型: 1 m:\(x=x×m\),输出\(x\ mod\ M\): 2 pos:\(x=x/\)第\(po ...
- 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> ...
- BZOJ5334: [Tjoi2018]数学计算
BZOJ5334: [Tjoi2018]数学计算 https://lydsy.com/JudgeOnline/problem.php?id=5334 分析: 线段树按时间分治即可. 代码: #incl ...
- [Tjoi2018]数学计算
[Tjoi2018]数学计算 BZOJ luogu 线段树分治 是不是想问为什么不暴力做? 模数没说是质数,所以不一定有逆元. 然后就是要每次build一下把线段树权值init成1, 博猪不知道为什么 ...
- 理工科应该的知道的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的最大整数 ...
随机推荐
- python学习大纲目录(转自alex博客https://www.cnblogs.com/alex3714/)
day01: 介绍.基本语法.流程控制 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 ...
- Arison [JS]window.location获取url各项参数详解
https://www.cnblogs.com/Arison/p/5286368.html 对于这样一个URL代码如下 复制代码 http://www.php230.com :80/fisker/po ...
- (MSSQL)sp_refreshview刷新视图失败及更新Table字段失败的问题解决
在近期工作中遇到一个任务,需要批量更改散布在很多Table中的某字段,同时刷新相关视图,但是在执行脚本时,发现了如下问题 更新字段问题 消息 ,级别 ,状态 ,第 行 对象'View_Simple' ...
- socket的几个配置函数
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- iOS使用Instruments的工具
使用Instruments的工具 iOSXcodeInstrumentsInstruments是一个官方提供的强大的性能调试工具集. 1.Blank(空模板):创建一个空的模板,可以从Library库 ...
- 201621123005《Java程序设计》第三周作业学习总结
201621123005<Java程序设计>第三周 学习总结 标签(空格分隔): 未分类 1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化 ...
- (转载) Chrome中canvas上drawImage无法画出image的解决办法
在自己写demo的过程中 碰到了这样一个问题 发现drawImage方法没有达到预期的效果 图片没办法显示 而fillRect等画图形的方法却工作良好 大概的代码如下: $(function() { ...
- php远程文件包含截断问题
今天在学习<白帽子讲web安全>一书是,提到一个php远程文件包含漏洞 可以从攻击者服务器中的一个写好的攻击脚本中远程执行命令 服务器中有漏洞的页面代码为: #test.php#error ...
- Java虚拟机访问读写其他进程的数据--RandomAccessFile
RandomAccessFile 是Java输入/输出流体系中功能最丰富的文件内容访问类,它提供了众多的方法来访问文件内容,它既可以读取文件内容,也可以向文件输出数据.并且它支持“任意访问”的方式,程 ...
- Http权威指南(cookie以及web认证机制)
其实对于cookie,想必大家都不陌生,cookie目前主要用于客户端的识别技术. 说到客户端识别技术,就不得不说一个登录态的问题了.登录态顾名思义,用于验证用户的登录与否. 1.登录态 对于PC端网 ...