神仙题

感觉就是一个暴力啊

线段树维护的是一个类似于键值线段树的东西?

每个叶子节点才表示一个操作

而在PushUp的时候合并答案

这个咋合并?

暴力合并。我们记录下当前模意义下所有的答案

然后暴力合并

于是查答案是O1的

然后明显开不下空间

但是考虑到模数的特殊性

于是拆成小质数CRT一下就好了

很完美的把暴力+线段树合并的真实意义+数学结合起来的一道题

#include<bits/stdc++.h>
using namespace std;
#define lc (p<<1)
#define rc (p<<1|1)
const int N=50010;
int Mod[4]={7,13,17,19};
const int M=29393;
int n,m;
int P[4][20][M+1];
void Init(){for(int i=0;i<=3;i++){for(int j=0;j<Mod[i];j++){P[i][j][0]=1;for(int k=1;k<M;k++){P[i][j][k]=P[i][j][k-1]*j%Mod[i]; }}}
}
struct Segment_Tree{int T[N<<2][4][20];inline void Clear(){memset(T,0,sizeof(T));}inline void PushUp(int p){for(int i=0;i<=3;i++){for(int j=0;j<Mod[i];j++)T[p][i][j]=T[rc][i][T[lc][i][j]];}}inline void PushNow(int p,char opt,int x){for(int i=0;i<=3;i++){for(int j=0;j<Mod[i];j++){if(opt=='+'){T[p][i][j]=(j+x)%Mod[i];}if(opt=='*'){T[p][i][j]=(j*x)%Mod[i];}if(opt=='^'){T[p][i][j]=P[i][j][x];}}}}inline void build(int p,int l,int r){if(l==r){char opt;int x;scanf("%c%d",&opt,&x);
//          cout<<opt<<" "<<x<<'\n';getchar();PushNow(p,opt,x);return;}int mid=(l+r)/2;build(lc,l,mid);build(rc,mid+1,r);PushUp(p);}inline void Update(int p,int l,int r,int pos,char opt,int x){if(l==r){PushNow(p,opt,x);return;}int mid=(l+r)/2;if(pos<=mid)Update(lc,l,mid,pos,opt,x);else Update(rc,mid+1,r,pos,opt,x);PushUp(p);}
}Tree;
int quick_pow(int x,int k,int Mod){int ret=1;while(k){if(k%2==1){ret=ret*x%Mod;}k/=2;x=x*x%Mod;}return ret;
}
void CRT(int x){int ans=0;for(int i=0;i<=3;i++){ans+=Tree.T[1][i][x%Mod[i]]*quick_pow(M/Mod[i],Mod[i]-2,Mod[i])%M*(M/Mod[i])%M; }cout<<ans%M<<'\n';
}
void Solve(){scanf("%d%d",&n,&m);getchar();Tree.Clear();Tree.build(1,1,n);for(int i=1;i<=m;i++){int flag;scanf("%d",&flag);
//      cout<<i<<" "<<flag<<'\n';if(flag==1){int x;scanf("%d",&x);CRT(x);
//          cout<<"hello";}else{int x;int Id;char opt;scanf("%d",&Id);getchar();scanf("%c%d",&opt,&x);Tree.Update(1,1,n,Id,opt,x);}}
}
int main(){
//  freopen("test.in","r",stdin);int Cas,Id=0;Init();scanf("%d",&Cas);while(Cas--){cout<<"Case #"<<++Id<<":"<<'\n';Solve();}
}

转载于:https://www.cnblogs.com/Leo-JAM/p/10079155.html

和Leo一起做爱线段树的好孩子HDU5238 Calculator相关推荐

  1. 和Leo一起做爱线段树的好孩子之火车运输

    ByteLand火车站(编号0)每天都要发往全国各地N列客运火车,编号1 N.第i列火车的目的地是编号Si的火车站. 对任意车站X,都与X+1车站有铁轨直接相连,因此火车站可以看成数轴上的整数点,第i ...

  2. 爱线段树的好孩子【九校2D1T3】优美序列

    Lxy养了N头奶牛,他把N头奶牛用1..N编号,第i头奶牛编号为i.为了让奶牛多产奶,每天早上他都会让奶牛们排成一排做早操.奶牛们是随机排列的.在奶牛排列中,如果一段区间[L,R]中的数从小到大排列后 ...

  3. 和Leo一起做爱字符串的好孩子量子纠缠

    很好的字符串题啊 建立Trie树 纠缠的时候用并查集并起来 然后查询的时候用并查集所代表的节点查询 #include<iostream> #include<cstdio> #i ...

  4. 和Leo一起做爱数学的好孩子之[SHOI2014]概率充电器

    著名的电子产品品牌SHOI 刚刚发布了引领世界潮流的下一代电子产品-- 概率充电器: "采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决 定!SHOI 概率充电器,您生活不可或 ...

  5. 和Leo一起做爱字符串的好孩子之 [SDOI2014]数数

    题目描述 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串.例如当S=(22,333,0233)时,233是幸运数,2333.20233.3223不是幸运 ...

  6. 筱玛爱线段树 (树状数组)

    https://ac.nowcoder.com/acm/contest/946/ 对操作顺序执行的话,会出现递归调用的情况,这样的话复杂度起码是m^2了,所以考虑把操作离线,然后逆序执行,这样的话已经 ...

  7. poj 2352 Stars 线段树(先建后查/边建边查)/树状数组三种方法思路详解,带你深入了解线段树难度⭐⭐⭐★

    poj 2352 Stars 目录 poj 2352 Stars 1.树状数组 2.线段树,先建树后查找 3.线段树,边建树边查找 Description Astronomers often exam ...

  8. Master of GCD(差分数组||线段树)

    题意:长度为n的数组,一开始都是1.对于区间操作l,r,x,在l~r上乘以x.x2||x3.问操作完毕之后,n个数的最大公因子是多少. 对于每个x,都等于2或者是3.那么看最大的公因子,就看各个位置上 ...

  9. P7988-[USACO21DEC] HILO G【set,线段树】

    正题 题目链接:https://www.luogu.com.cn/problem/P7988 题目大意 给出一个长度为nnn的排列,开始有一个数字xxx,第一次询问回答x<a1x<a_1x ...

最新文章

  1. jenkins关闭,重启几种方式
  2. wait/notify/notifyAll在Object类中
  3. 5.fork和vfork
  4. CSS设置七彩的下拉菜单
  5. drools动态配置规则_关于规则引擎
  6. Python显示文本
  7. int 和String之间的互转
  8. Android中的USB中的UsbAccessory和UsbDevice的区别
  9. python创建类mymath_构建DLL(MyMathFuncs)以在Python Ctypes中使用
  10. BZOJ 1565: [NOI2009]植物大战僵尸
  11. vscode安卓html扩展,vscode扩展信息.html
  12. matlab fspecial disk,Matlab fspecial 用法详述,附示例
  13. Python实现图片灰度化
  14. 中国象棋马走日(要求打印每一种走法) — 递归
  15. 强制绕过硬件检查,并升级Windows11
  16. poj 1655 树的重心
  17. 三电平半桥LLC谐振变换器电路仿真 采用频率控制方式 引入一定的移相角度
  18. ui设计培训课程是哪些
  19. Android Battery信息
  20. HTML5期末大作业:京东网站设计——仿2016版京东首页(1页) HTML+CSS+JavaScript 大学生网页作品 电商网页设计作业模板 学生网页制作源代码下载

热门文章

  1. Summaries and TensorBoard
  2. Pytorch系列笔记(二)
  3. java jpanel边框_JPanel设置边框
  4. 解决电脑蓝牙可以连接手机电脑等设备却无法连接到耳机的问题
  5. CF85D Sum of Medians
  6. 阿里云服务器配置外网访问
  7. 前端微信一键登录和微信小程序支付总结
  8. 详解色彩模型、色域以及颜色空间转换
  9. 【owt-server】m88分支和m59-server
  10. pytorch股票预测