HDU 5475 线段树 + 乘法+取模
来源:互联网 发布:淘宝网tfboys同款书包 编辑:程序博客网 时间:2024/06/04 01:38
线段树 + 乘法+取模
题意:
有一个数字最开始是1,现在有两种操作,1. 乘以一个数字y,取模输出答案2. 除以一个之前乘以的数字,取模输出答案。
思路:
操作次数有1e5个,直接乘法也有可能,但是问题是一些数字乘了又除了,直接写很容易由于精度的问题爆了。而线段树竟然可以这样解决!!!线段树维护所有操作,核心操作是乘法,当除以一个数字时,就把那个数字改为1,然后轻轻松松根据回溯就可以不超精度解决,并且让x没必要一直保持一个很大的状态,线段树每次重新利用到没有修改的结果进行修改即可。
#include <iostream>#include <cstdio>#include <cstring>using namespace std;typedef long long LL;const int maxn = 1e5;struct Tree{ int l,r; LL mul;}rt[maxn*4];int n;int mod;void build(int root,int l,int r){ rt[root].l = l,rt[root].r = r; rt[root].mul = 1; if(l == r) return ; int mid = (l+r)>>1; build(root<<1,l,mid); build(root<<1|1,mid+1,r); return ;}void push_up(int root){ rt[root].mul = (rt[root<<1].mul*rt[root<<1|1].mul)%mod;}void update(int root,int l,int r,int c){ if(rt[root].l > r || rt[root].r < l) return ; if(rt[root].l >= l && rt[root].r <= r) { rt[root].mul = c; return ; } update(root<<1,l,r,c); update(root<<1|1,l,r,c); push_up(root);}int main(){ //freopen("in.txt","r",stdin); int t,ncase = 1; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&mod); build(1,1,n); printf("Case #%d:\n",ncase++); for(int i = 1;i <= n; i++) { int op ; scanf("%d",&op); if(op == 1) { int y; scanf("%d",&y); update(1,i,i,y); printf("%I64d\n",rt[1].mul); } else { int ith; scanf("%d",&ith); update(1,ith,ith,1); printf("%I64d\n",rt[1].mul); } } } return 0;}
阅读全文
0 0
- HDU 5475 线段树 + 乘法+取模
- 线段树乘法取%版
- HDU 5875 Function (取模+分治+线段树)
- HDU 5666 Segment (大数乘法取模)
- hdu 5475 线段树
- ZOJ(矩阵乘法+线段树)
- Codeforces719E 矩阵乘法+线段树
- zoj3886(线段树,区间取模)
- hdu 5407 CRB and Candies(素数筛选法,除法取模(乘法逆元))
- HDU 5690 查找循环节 数学公式快速幂+乘法逆元(除法取模)
- hdu 5446 Lucas定理,中国剩余定理,处理爆long long 的乘法取模运算
- hdu 5068 Harry And Math Teacher ( 线段树+矩阵乘法 )
- HDU 3074 Multiply game【线段树||zkw线段树||扩展gcd*乘法逆元||欧拉定理】
- hdu 5475(线段树)
- 乘法逆元(除法取模)
- ACdream 1007【快速幂+乘法取模】
- 大数乘法,并对结果取模
- BestCoder #80 - 1002 快速乘法取模
- SSH bind:Cannot assign requested address
- Android 7.0 拍照使用getUriForFile
- 微信135富文本编辑器编辑的样式与页面无法兼容的问题
- 阿里测评题目:跑得快
- MySQL事务回滚rollback与提交commit的操作
- HDU 5475 线段树 + 乘法+取模
- 测试
- 22读书笔记之创建自己的内容提供器
- 最短子数组
- MatLab GUI 学习笔记-数据传递
- jQuery插件mmGrid的使用
- ffmpeg开发之旅(4):MP3编码格式分析与lame库编译封装
- zookeeper启动时报错排除
- 在nginx中配置如何防止直接用ip访问服务器web server及server_name特性讲解