hdu5238 calculator (线段树+crt)
(并不能)发现29393不是质数,而是等于7*13*17*19
于是可以用四个线段树分别维护模意义下,对x进行一个区间的操作后的值
最后再把这四个的答案用crt拼起来
也可以不crt,而是预处理0~29392的每个情况
为了降低复杂度,预处理模7/13/17/19的幂
注意询问时,要把询问对7/13/17/19先取模
复杂度$O((7+13+17+19)nlogn)$
#include<cstdio>
#include<cstring>
#include<algorithm>
#define pa pair<int,int>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
const int maxn=5e4+; inline int rd(){
int x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} struct Node{
int op,v;
}; int Pow[][][],ans[][][][]; inline void init_pow(int x){
for(int i=;i<x;i++){
Pow[x][i][]=;
for(int j=;j<x-;j++) Pow[x][i][j]=Pow[x][i][j-]*i%x;
}
} inline int fpow(int x,int y,int mod){
return Pow[mod][x%mod][y%(mod-)];
} inline int cal(int x,Node y,int mod){
if(y.op==) return (x+y.v)%mod;
else if(y.op==) return x*y.v%mod;
else return fpow(x,y.v,mod);
} struct SegT{
int trans[maxn<<][],mod; inline void update(int p){
int a=p<<,b=p<<|;
for(int i=;i<mod;i++){
trans[p][i]=trans[b][trans[a][i]];
}
}
inline void change(int p,int l,int r,int x,Node y){
if(l==r){
for(int i=;i<mod;i++) trans[p][i]=cal(i,y,mod);
}else{
int m=(l+r)>>;
if(x<=m) change(p<<,l,m,x,y);
else change(p<<|,m+,r,x,y);
update(p);
}
}
}tr[]; int N,M; inline Node getnode(){
char s[];Node x;
scanf("%s",s);
if(s[]=='+') x.op=;
else if(s[]=='*') x.op=;
else x.op=;
x.v=;
for(int k=,j=strlen(s);k<j;k++) x.v=x.v*+s[k]-'';
return x;
} inline int solve(int x){
int a[];
for(int i=;i<;i++) a[i]=tr[i].trans[][x%tr[i].mod];
return ans[a[]][a[]][a[]][a[]];
} int main(){
int i,j,k;
tr[].mod=,tr[].mod=,tr[].mod=,tr[].mod=;
init_pow(),init_pow(),init_pow(),init_pow();
for(i=;i<;i++){
ans[i%][i%][i%][i%]=i;
}
for(int T=rd(),t=;t<=T;t++){
for(i=;i<;i++){
for(j=;j<=*N;j++){
for(k=;k<tr[i].mod;k++)
tr[i].trans[j][k]=k;
}
}
printf("Case #%d:\n",t);
N=rd(),M=rd();
for(i=;i<=N;i++){
Node x=getnode();
for(j=;j<;j++) tr[j].change(,,N,i,x);
}
for(i=;i<=M;i++){
int a=rd();
if(a==){
printf("%d\n",solve(rd()));
}else{
int x=rd();Node y=getnode();
for(j=;j<;j++) tr[j].change(,,N,x,y);
}
}
}
return ;
}
hdu5238 calculator (线段树+crt)的更多相关文章
- HDU 5238 Calculator 线段树 中国剩余定理
题意: 给一个计算器,有一系列计算步骤,只有加,乘,幂三种运算. 有一种查询操作:查询初始值为\(x\)的时候,最终运算结果模\(29393\)的值. 有一种修改操作:可以修改第\(p\)个运算的运算 ...
- BZOJ 1129 exgcd+CRT+线段树
思路: 先copy一下百度百科 作为预备知识吧多重全排列定义:求r1个1,r2个2,…,rt个t的排列数,设r1+r2+…+rt=n,设此排列数称为多重全排列,表示为$P(n;r1,r2,…,rt)$ ...
- HDU 5475(2015 ICPC上海站网络赛)--- An easy problem(线段树点修改)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5475 Problem Description One day, a useless calculato ...
- hdu 5475 An easy problem(暴力 || 线段树区间单点更新)
http://acm.hdu.edu.cn/showproblem.php?pid=5475 An easy problem Time Limit: 8000/5000 MS (Java/Others ...
- HDU 5475 An easy problem 线段树
An easy problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...
- 【XSY2720】区间第k小 整体二分 可持久化线段树
题目描述 给你你个序列,每次求区间第\(k\)小的数. 本题中,如果一个数在询问区间中出现了超过\(w\)次,那么就把这个数视为\(n\). 强制在线. \(n\leq 100000,a_i<n ...
- 2018.10.18 NOIP训练 ZUA球困难综合征(线段树)
传送门 考虑到模数等于7 * 13 * 17 * 19. 那么只需要维护四棵线段树求出每个数处理之后模7,13,17,197,13,17,197,13,17,19的值再用crtcrtcrt合并就行了. ...
- hdu 5475 (线段树)
An easy problem Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- HDU5475(线段树)
An easy problem Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
随机推荐
- HttpWebRequest 改为 HttpClient 踩坑记-请求头设置
HttpWebRequest 改为 HttpClient 踩坑记-请求头设置 Intro 这两天改了一个项目,原来的项目是.net framework 项目,里面处理 HTTP 请求使用的是 WebR ...
- SqlServer主键和自增长设置
SqlServer主键和自增长设置 Intro 有时候有些 sql 语句有些不太记得了,谨以此文备忘. 设置主键以及自增长可分两种情况: 新创建表 表已创建但是没有设置主键和自增长 新创建表 创建表 ...
- 智能POS如何获取日志&数据库文件
使用Teamviewer连接安卓机器,文件传输 ================================================================== 智能POS查看数据 ...
- python 通过元类控制类的创建
一.python中如何创建类? 1. 直接定义类 class A: a = 'a' 2. 通过type对象创建 在python中一切都是对象 在上面这张图中,A是我们平常在python中写的类,它可以 ...
- SQL Server 查看CPU情况
--CPU相关视图 SELECT * FROM sys.dm_os_sys_info SELECT * FROM sys.dm_exec_sessions SELECT * FROM sys.sysp ...
- VMware虚拟机在仅主机模式下的网卡无法动态获取IP
自己在VMware虚拟机中开启一台主机的时候,发现比以往的开机速度慢了好多,起初不以为然,直到用Xshell通过ssh远程连接eth1的ip地址才发现连接失败(这个ip是之前eth1正常的时候获取的i ...
- 2星|《重新定义物流》:形式像PPT,内容像公关稿
全书彩印,彩图大概占一半篇幅,感觉是把一些PPT配上点说明拼成了一本书.前后的彩图风格差异较大,大部分给我的感觉都是堆砌名词术语的官方宣传材料,少部分色调单一形式简单的图,像是作者们自己绘制的,反而能 ...
- ZooInspector 连接不到 Zookeeper 的解决方法
Zookeeper正常启动后,在使用 ZooInspector 连接 Zookeeper 时出现了连接不上的问题. [root@localhost bin]# zkServer.sh start Zo ...
- 用人类社会工程学对C语言中的一些基本概念的剖析与理解
最近在学C语言程序设计时总是遇到一些概念理解上的不清晰与混乱的地方,在一次偶然间想到了以前看过的一部电影<我是谁,没有一个系统是安全的>,里面的主角用社会工程学的想法结合黑客知识化险为夷, ...
- zookeeper安装教程(zookeeper3.4.5为例)
zookeeper有单机.伪集群.集群三种部署方式,可根据自己对可靠性的需求选择合适的部署方式.下边对这三种部署方式逐一进行讲解. 一.单机安装 1.1 下载 进入要下载的版本的目录,选择.tar.g ...