【HDU】5238 Calculator 【中国剩余定理+线段树】
传送门:【HDU】5238 Calculator
题目分析:
模数可以拆成四个小素数:7,13,17,19。
这样我们可以分别对这几个素数跑答案,最后中国剩余定理搞一下就好。中间我们用线段树,保存每个模数下,一个数通过一个区间内的操作转化成的另一个数是多少,并且这个满足合并,然后就做完了。
PS:听叉姐他们说才知道……完全可以不用中国剩余定理,直接暴力打一个4维数组存下来就可以了……
my code:my~~code:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std ;typedef long long LL ;#define clr( a , x ) memset ( a , x , sizeof a )
#define ls ( o << 1 )
#define rs ( o << 1 | 1 )
#define lson ls , l , m
#define rson rs , m + 1 , r
#define mid ( ( l + r ) >> 1 )
#define root 1 , 1 , nconst int MAXN = 50005 ;
const int MOD = 29393 ;int mod[4] = { 7 , 13 , 17 , 19 } ;
int p[4][20][MOD] ;
int f[MAXN << 2][4][20] ;
int n , m ;void preprocess () {for ( int i = 0 ; i < 4 ; ++ i ) {for ( int j = 0 , m = mod[i] ; j < m ; ++ j ) {p[i][j][0] = 1 ;for ( int k = 1 ; k < MOD ; ++ k ) {p[i][j][k] = p[i][j][k - 1] * j % m ;}}}
}void upd ( int o , char op , int x ) {for ( int i = 0 ; i < 4 ; ++ i ) {for ( int j = 0 , m = mod[i] ; j < m ; ++ j ) {if ( op == '+' ) f[o][i][j] = ( j + x ) % m ;else if ( op == '*' ) f[o][i][j] = ( j * x ) % m ;else f[o][i][j] = p[i][j][x] ;}}
}void push_up ( int o ) {for ( int i = 0 ; i < 4 ; ++ i ) {for ( int j = 0 , m = mod[i] ; j < m ; ++ j ) {f[o][i][j] = f[rs][i][f[ls][i][j]] ;}}
}void build ( int o , int l , int r ) {if ( l == r ) {char c ;int x ;scanf ( " %c%d" , &c , &x ) ;upd ( o , c , x ) ;return ;}int m = mid ;build ( lson ) ;build ( rson ) ;push_up ( o ) ;
}void update ( int x , char c , int v , int o , int l , int r ) {if ( l == r ) {upd ( o , c , v ) ;return ;}int m = mid ;if ( x <= m ) update ( x , c , v , lson ) ;else update ( x , c , v , rson ) ;push_up ( o ) ;
}int exgcd ( int a , int b , int &x , int &y ) {if ( !b ) {x = 1 ;y = 0 ;return a ;}int ans = exgcd ( b , a % b , y , x ) ;y -= a / b * x ;return ans ;
}int crt ( int v ) {int ans = 0 ;for ( int i = 0 ; i < 4 ; ++ i ) {int t = MOD / mod[i] , x , y ;exgcd ( t , mod[i] , x , y ) ;ans = ( ans + f[1][i][v % mod[i]] * t * ( x % mod[i] ) ) % MOD ;}return ( ans + MOD ) % MOD ;
}void solve () {int op , x , v ;char c ;scanf ( "%d%d" , &n , &m ) ;build ( root ) ;while ( m -- ) {scanf ( "%d%d" , &op , &x ) ;if ( op == 1 ) {printf ( "%d\n" , crt ( x ) ) ;} else {scanf ( " %c%d" , &c , &v ) ;update ( x , c , v , root ) ;}}
}int main () {int T ;preprocess () ;scanf ( "%d" , &T ) ;for ( int i = 1 ; i <= T ; ++ i ) {printf ( "Case #%d:\n" , i ) ;solve () ;}return 0 ;
}
【HDU】5238 Calculator 【中国剩余定理+线段树】相关推荐
- HDU 5238 Calculator(中国剩余定理+线段树)
题意: 有加,乘,次方3种运算,初始值为x,给定运算式. 现在有2种操作: 第一种:告诉你x的值,求答案模29393. 第二种:更改某个位置的运算. 解析: 线段树维护值域的问题,但是那个操作并不能简 ...
- hdu5238(中国剩余定理+线段树)
hdu5238 题目链接 题意是对于一个数字x,进行一次有n个运算操作的的运算,如*5 +6 ^3,就是对x先*5再+6 再3次幂,然后输出最后的结果对29393取模的答案. 然后接下来有m次操作,有 ...
- HDU 1166 敌兵布阵(线段树:点更新,区间求和)
HDU 1166 敌兵布阵(线段树:点更新,区间求和) http://acm.hdu.edu.cn/showproblem.php?pid=1166 题意: 给你n个整数,然后给你多条命令,每条命令如 ...
- HDU 3016 Man Down (线段树+dp)
HDU 3016 Man Down (线段树+dp) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- 2019CCPC网络赛 1002 HDU 6703(权值线段树)
2019CCPC网络赛 1002 HDU 6703(权值线段树) 思路:用权值线段树存题目给的数据后,2操作就是求权值线段树中大于等于k的部分中,靠近左端点的第一个大于r的值(这个求出来的只是原序列中 ...
- HDU 5238 Calculator 线段树 中国剩余定理
题意: 给一个计算器,有一系列计算步骤,只有加,乘,幂三种运算. 有一种查询操作:查询初始值为\(x\)的时候,最终运算结果模\(29393\)的值. 有一种修改操作:可以修改第\(p\)个运算的运算 ...
- hdu 5238 Calculator(线段树+CRT)
题意:有加,乘,次方3种运算,初始值为x,给定运算式,2种操作,第一种:告诉你x的值,求答案模29393.第二种:更改某个位置的运算. 做法:乍一看就像线段树,但是那个操作并不能简单的合并,所以我们得 ...
- HDU 5238 Calculator【线段树】
其实这题真是不好想啊 首先,我们观察到29393不是一个质数,通过质分解我们得到 29393=7∗13∗17∗19 29393=7*13*17*19于是就可以想到中国剩余定理,将数给分解了再求模方程. ...
- hdu 5238 Calculator
某线段树 打模拟赛的时候不知道区间该维护什么东西使其变得可合并,然后就放着了 赛后看了题解才知道这个题维护的是映射关系,感觉也是十分的厉害 考虑一个算式a+4(mod7)=ba + 4 \pmod{7 ...
最新文章
- 机器学习(MACHINE LEARNING)种群竞争模型
- 使用Azure SDK 1.4.1中的Web Deploy
- SFP模块光信号强度知识介绍
- Android中AVD(Android Virtual Device)不能启动的处理方法
- Hook的两个小插曲
- RHEL 8 - 安装 webconsole
- 海缆修好之前,上网悠着点
- unity3d用鼠标拖动物体的一段代码
- Web文件管理原码.rar
- 【Java】菜鸟教程个人Java学习笔记
- SpringBoot系列之(二):2.注解
- 腾讯地图实时精准定位
- pstack 安装linux_linux下的进程堆栈查看工具pstack
- 简单的下拉列表的二级联动、省市
- PHP开发人员的8个分布式计算谬论
- c语言转换为stc程序,STC51单片机入门(C语言)
- Knowledge Graph表示学习--TransE系列
- PS案例提升 【第1节】抠图--薄、透、露的朦胧美 案例1:扣透明的冰块
- 【数据结构】二叉树顺序结构及实现
- iso快门光圈_相机最重要的设置:快门速度,光圈和ISO解释