博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模板:线段树(2)——加法,乘法,求和
阅读量:4552 次
发布时间:2019-06-08

本文共 1300 字,大约阅读时间需要 4 分钟。

 区间加法乘法修改,区间查询

1 #include
2 #include
3 using namespace std; 4 int p; 5 long long a[100005]; 6 struct node{ 7 long long v, mul, add; 8 }st[500005]; 9 void bt(int root, int l, int r){ 10 //初始化lazytag 11 st[root].mul=1; 12 st[root].add=0; 13 if(l==r){ 14 st[root].v=a[l]; 15 } 16 else{ 17 int m=(l+r)/2; 18 bt(root*2, l, m); 19 bt(root*2+1, m+1, r); 20 st[root].v=st[root*2].v+st[root*2+1].v; 21 } 22 st[root].v%=p; 23 return ; 24 } 25 void pushdown(int root, int l, int r){ 26 int m=(l+r)/2; 27 //儿子的值=此刻儿子的值*爸爸的乘法lazytag+儿子的区间长度*爸爸的加法lazytag 28 st[root*2].v=(st[root*2].v*st[root].mul+st[root].add*(m-l+1))%p; 29 st[root*2+1].v=(st[root*2+1].v*st[root].mul+st[root].add*(r-m))%p; 30 st[root*2].mul=(st[root*2].mul*st[root].mul)%p; 31 st[root*2+1].mul=(st[root*2+1].mul*st[root].mul)%p; 32 st[root*2].add=(st[root*2].add*st[root].mul+st[root].add)%p; 33 st[root*2+1].add=(st[root*2+1].add*st[root].mul+st[root].add)%p; 34 //把父节点的值初始化 35 st[root].mul=1; 36 st[root].add=0; 37 return ; 38 } 39 //乘法,stdl此刻, l给出的 40 void ud1(int root, int stdl, int stdr, int l, int r, long long k){ 41 if(r

 

转载于:https://www.cnblogs.com/Aze-qwq/p/9857029.html

你可能感兴趣的文章
UVa10054 - The Necklace(欧拉回路【输出带来的麻烦)
查看>>
string和stringbuffer的区别 集合的作用 ArrayList vector linklist hashmap hashtable collection和collections...
查看>>
6月27日 ajax
查看>>
iOS开发之画图板(贝塞尔曲线)
查看>>
4嵌入式作业io
查看>>
IntelliJ Idea编译报错:javacTask: 源发行版 1.7 需要目标发行版 1.7
查看>>
Cognos中新建SQLserver数据源的步骤
查看>>
HttpClient连接超时及读取超时
查看>>
SQL优化方法
查看>>
SEO必须掌握的高级搜索指令
查看>>
生产者消费者模型
查看>>
ORACLE 字符串超长问题解决方案
查看>>
使用ZooKeeper协调多台Web Server的定时任务处理(方案1)
查看>>
20171116 每周例行报告
查看>>
[C#] SHA1校验函数用法
查看>>
linux 下 VMware 提示Unable to change virtual machine power state:
查看>>
洛谷P1585 魔法阵
查看>>
线程 题待做
查看>>
PL/SQL可以连oracle,但是jdbc连不上 【转】
查看>>
使用 highlight.js 在网页中高亮显示java 代码 【原】
查看>>