[TJOI2018]数学计算 线段树】的更多相关文章

题意 题目链接 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…
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…
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<…
题目分析: 大概是考场上的签到题.首先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…
题目链接 洛谷P4588 题解 用线段树维护即可 #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<map> #define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt) #define REP(i,n) for (int i = 1;…
用线段树维护操作序列,叶子结点存要乘的数,非叶子结点存区间乘积,每次输出tr[1] 就是答案. 1 #include<bits/stdc++.h> 2 #define ll long long 3 #define lson k << 1, l, mid 4 #define rson k << 1 | 1, mid + 1, r 5 #define ls k << 1 6 #define rs k << 1 | 1 7 #define mid ((…
原题传送门 这题是线段树的模板题 显而易见,直接模拟是不好模拟的(取模后就不好再除了) 我们按照时间来建一颗线段树 线段树初始值都为1,用来维护乘积 第一种操作就在当前时间所对应的节点上把乘数改成m 第二种操作就是把第pos个节点的乘数该回1 每次询问的答案就是线段树根节点维护的数值(pushup时要取模) #include <bits/stdc++.h> #define N 100005 #define ll long long #define getchar nc using namesp…
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…
题目大意:有一个数$x$和取模的数$mod$,初始为$1$,有两个操作: $m:x=x\times m$并输出$x\% mod$ $pos:x=x/第pos次操作乘的数$(保证合法),并输出$x\%mod$ 题解:对时间建一棵线段树,记录区间积就可以了 卡点:无 C++ Code: #include <cstdio> #define maxn 100010 int Tim, n, mod; long long V[maxn << 2]; void build(int rt, int…
线段树裸题 难度在于认识到这个没法线性做 #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,…
题意 考虑一个操作会对一段时间内的询问产生影响,于是将线段树上的这段时间打上乘这个数的标记,最后dfs整颗线段树. code: #include<bits/stdc++.h> using namespace std; #define int long long #define ls(p) (p<<1) #define rs(p) (p<<1|1) const int maxn=100010; int T,n,mod; int a[maxn],ans[maxn],mul[…
题目描述 小豆现在有一个数\(x\),初始值为\(1\).小豆有\(Q\)次操作,操作有两种类型: \(1\;m\):\(x=x\times m\)输出\(x\%mod\); \(2\;pos\):\(x= x/\)第\(pos\)次操作所乘的数(保证第\(pos\)次操作一定为类型\(1\),对于每一个类型\(1\)的操作至多会被除一次)输出\(x\%mod\); 输入格式 一共有\(t\)组输入(\(t\leq5\)); 对于每一组输入,第一 行是两个数字\(Q,mod\)(\(Q\leq1…
题目 小豆现在有一个数 \(x\) ,初始值为 \(1\) . 小豆有 \(Q\) 次操作,操作有两种类型: \(m\): \(x=x×m\),输出 \(x\mod M\) : \(pos\): \(x=x/\) 第 \(pos\) 次操作所乘的数(保证第 \(pos\) 次操作一定为类型 \(1\),对于每一个类型 \(1\) 的操作至多会被除一次),输出 \(x\mod M\) . 输入格式 一共有 \(t\) 组输入. 对于每一组输入,第一行是两个数字 \(Q,M\) . 接下来 \(Q\…
题目链接: http://codeforces.com/contest/712/problem/E 题目大意: 一条直线上有n格,在第i格有pi的可能性向右走一格,1-pi的可能性向左走一格,有2中操作:单点修改pi以及询问从L格出发最终从R格离开区间[L,R]的概率. 这题在cf上A的人比较少,本来不打算去做的,然后看了下是概率的题目,比较感兴趣,就去做了下,然后发现并不会做,就搜了题解. 题解: 参考http://www.cnblogs.com/qscqesze/p/5868047.html…
题意 : 描述 现在有一个有n个元素的数组a1, a2, ..., an. 记f(i, j) = ai * ai+1 * ... * aj. 初始时,a1 = a2 = ... = an = 0,每次我会修改一个ai的值,你需要实时反馈给我 ∑f(i, j) (1 <= i <= j <= n) 的值 mod 10007. 输入 第一行包含两个数n(1<=n<=100000)和q(1<=q<=500000). 接下来q行,每行包含两个数i, x,代表我把ai的值改…
5334: [Tjoi2018]数学计算 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 220  Solved: 147[Submit][Status][Discuss] Description 小豆现在有一个数x,初始值为1. 小豆有Q次操作,操作有两种类型:  1 m: x = x  *  m ,输出 x%mod; 2 pos: x = x /  第pos次操作所乘的数(保证第pos次操作一定为类型1,对于每一个类型1 的操作至多会被除一次)…
描述 小豆现在有一个数 xxx ,初始值为 111 . 小豆有 QQQ 次操作,操作有两种类型: 111 $ m$ : x=x×mx=x×mx=x×m ,输出 xxx modmodmod MMM : $2 $ pospospos: x=x/x=x/x=x/ 第$ pos$ 次操作所乘的数(保证第 pospospos 次操作一定为类型 111,对于每一个类型 111 的操作至多会被除一次),输出 xxx modmodmod MMM . 输入 一共有 ttt 组输入. 对于每一组输入,第一行是两个数…
[BZOJ5334]数学计算(线段树) 题面 BZOJ 洛谷 题解 简单的线段树模板题??? 咕咕咕. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> using namespace std; #define ll long long #define MAX 10010…
题目内容 小豆现在有一个数\(x\),初始值为\(1\).小豆有\(Q\)次操作,操作有两种类型: 1 m:\(x=x×m\),输出\(x\ mod\ M\): 2 pos:\(x=x/\)第\(pos\)次操作所乘的数(保证第\(pos\)次操作一定为类型\(1\),对于每一个类型\(1\)的操作至多会被除一次),输出\(x\ mod\ M\). 输入格式 一共有\(t\)组输入. 对于每一组输入,第一行是两个数字 \(Q,M\). 接下来\(Q\)行,每一行为操作类型\(op\),操作编号或…
小豆现在有一个数 x,初始值为 1.小豆有 QQ 次操作,操作有两种类型: 1 m:将 x变为 x × m,并输出 x mod M 2 pos:将 x 变为 x 除以第 pos次操作所乘的数(保证第 pos 次操作一定为类型 1,对于每一个类型 1 的操作至多会被除一次),并输出 x mod M. 第一眼真的看不出来是个线段树的题,仔细思考看题解后才明白思路,以时间为轴,创建以每次操作次数为叶子节点的线段树,每次操作只需更改叶子 节点的值,最终pushup上去后,tr[1]就是我们要找的x的值…
In mathematical terms, the sequence Fn of Fibonacci numbers is defined by the recurrence relation F1 = 1; F2 = 1; Fn = Fn - 1 + Fn - 2 (n > 2). DZY loves Fibonacci numbers very much. Today DZY gives you an array consisting of n integers: a1, a2, ...,…
Description 在一片美丽的大陆上有100000个国家,记为1到100000.这里经济发达,有数不尽的账房,并且每个国家有一个银行.某大公司的领袖在这100000个银行开户时都存了3大洋,他惜财如命,因此会不时地派小弟GFS清点一些银行的存款或者让GFS改变某个银行的存款.该村子在财产上的求和运算等同于我们的乘法运算,也就是说领袖开户时的存款总和为3100000.这里发行的软妹面额是最小的60个素数(p1=2,p2=3,…,p60=281),任何人的财产都只能由这60个基本面额表示,即设…
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 59891    Accepted Submission(s): 25331 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营 地,Derek和Tidy的任务…
https://www.hackerrank.com/contests/101hack44/challenges/palindromic-subsets 如果有3个a.2个b.1个c. 每个a看成不同的,那么能选出多少个不同的回文串呢? 从回文串入手,因为回文串最多只有1种字母是奇数个. 那么,如果我能快速算区间[L, R]中各种字母出现的次数,就好了. 假设上面的数据,所得到的回文串是: a取奇数个:2^2 * 2^1(b只能取偶数个) * 2^0(C是偶数个,这个时候是空集) 然后再枚举b取…
题目传送门(内部题12) 输入格式 第一行,一个整数$n$,代表树的点数.第二行,$n$个整数,第$i$个整数是$B_i$,描述排列$B$.接下来$n−1$行,每行两个整数$u,v$,描述一条树边$(u,v)$.保证$1\leqslant B_i\leqslant n$,$1\leqslant u\neq v\leqslant n$.保证数据合法. 输出格式 输出一个整数表示答案对${10}^9+7$取模的值. 样例 样例输入1: 52 1 3 5 41 22 32 44 5 样例输出1: 样例…
线段树计算逆序数的原理: 用线段树来统计已插入的数的个数(所以要保证最大的那个数不能太大,否则数组都开不了),然后每插入一个数,就查询比插入的数大的个数,累加即可. 这个题还有一个特点就是,题目给的是0至n-1的全排列,也就是说每个数都不同.那么abcde的逆序数与bcdea的逆序数就很明了了. 假设比a小的数有t个,那么比a大的数有n-t-1个,那么abcde转换至bcdea的逆序数就增加了n-t-1,减少了t 不需要build函数建树,因为初始状态没有数插入,直接menset就可以了 #in…
题目描述 给你一个长度为\(n\)的数列,第\(i\)个数为\(a_i\).每个数的质因子都只有前\(60\)个质数.有\(q\)个询问,每次给你\(l,r\),求\(\varphi(\prod_{i=l}^ra_i)\) 模数为\(19961993\),是个质数 \(n=100000,q\leq 100000\) 题解 水题 \[ \phi(x)=x\prod_{p_i|x}(1-\frac1{p_i}) \] 用线段树维护区间乘积和这个区间的乘积的质因子(每个质数有没有出现) 然后乱搞 时间…