BZOJ 5334: [Tjoi2018]数学计算】的更多相关文章

线段树裸题 难度在于认识到这个没法线性做 #include<cstdio> using namespace std; int n,mod,tr[400005]; void insert(int t,int l,int r,int x,int y){ if (l==r){ tr[t]=y; return; } int mid=(l+r)>>1; if (x<=mid) insert(t<<1,l,mid,x,y); else insert(t<<1|1,…
BZOJ5334: [Tjoi2018]数学计算 https://lydsy.com/JudgeOnline/problem.php?id=5334 分析: 线段树按时间分治即可. 代码: #include <cstdio> #include <cstring> #include <algorithm> #include <cstdlib> using namespace std; #define N 100050 #define ls p<<1…
[Tjoi2018]数学计算 BZOJ luogu 线段树分治 是不是想问为什么不暴力做? 模数没说是质数,所以不一定有逆元. 然后就是要每次build一下把线段树权值init成1, 博猪不知道为什么for就WA,build就过了(用RE自动机查了下,发现还是有0...) for(int i=1;i<=(_<<1);i++)s[i]=1; 有知道的一定在评论告诉我 其他的就是线段树分治的板子了罢 到写这篇blog的时候博猪还是luogu跑得最快的,BZOJrk12嘻嘻 #define l…
模意义下除法若结果仍为整数的话,可以记录模数的所有质因子,计算这些质因子的次幂数,剩余的exgcd解决. $O(n\log n)$但有9的常数(1e9内的数最多有9个不同的质因子),T了. #include<cstdio> #include<algorithm> #define rep(i,l,r) for (int i=(l); i<=(r); i++) using namespace std; ; ],p[],s[]; void frac(int n){ ; i*i<…
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> #incl…
题意 题目链接 Sol TJOI怎么全是板子题 对时间开个线段树,然后就随便做了.... #include<bits/stdc++.h> using namespace std; const int MAXN = 1e6 + 10; int mod; template<typename A, typename B> inline A mul(A x, B y) { return 1ll * x * y % mod; } inline int read() { char c = ge…
原题传送门 这题是线段树的模板题 显而易见,直接模拟是不好模拟的(取模后就不好再除了) 我们按照时间来建一颗线段树 线段树初始值都为1,用来维护乘积 第一种操作就在当前时间所对应的节点上把乘数改成m 第二种操作就是把第pos个节点的乘数该回1 每次询问的答案就是线段树根节点维护的数值(pushup时要取模) #include <bits/stdc++.h> #define N 100005 #define ll long long #define getchar nc using namesp…
题目分析: 大概是考场上的签到题.首先mod不是质数,所以不能求逆元.注意到有加入操作和删除操作.一个很典型的想法就是线段树分治.建立时间线段树然后只更改有影响的节点,最后把所有标记下传.时间复杂度是O(nlogn). 代码: #include<bits/stdc++.h> using namespace std; int q,mod; ]; ]; void read(){ memset(p,,sizeof(p)); memset(data,,sizeof(data)); scanf(&quo…
Description 小豆现在有一个数x,初始值为1. 小豆有Q次操作,操作有两种类型:  1 m: x = x  *  m ,输出 x%mod; 2 pos: x = x /  第pos次操作所乘的数(保证第pos次操作一定为类型1,对于每一个类型1 的操作至多会被除一次),输出x%mod Input 一共有t组输入(t ≤ 5) 对于每一组输入,第一行是两个数字Q, mod(Q ≤ 100000, mod  ≤ 1000000000);  接下来Q行,每一行为操作类型op,操作编号或所乘的…
---题面--- 题解: ,,,考场上看到这题,没想到竟然是省选原题QAQ,考场上把它当数学题想了好久,因为不知道怎么处理有些数没有逆元的问题....知道这是线段树后恍然大悟. 首先可以一开始就建出一个长度为n的操作序列,初始值都是1,表示一开始默认是1乘上n个1,因为乘1也就相当于没乘. 对于操作1,直接将操作序列上对应的位置单点修改为给定值,维护区间乘积. 对于操作2,将序列上对应位置单点修改为1. 查询直接查询线段树的根即可. #include<bits/stdc++.h> using…