区间加(Add_Seq),区间修改(Modify_Seq),区间求和(Query),区间最大值(Query_MAX),单点加(Add),单点修改(Modify)
有待补充…

#include<algorithm>
#include<ctype.h>
#include<cstdio>
#define N 100050
using namespace std;
inline int read(){int x=0,f=1;char c=getchar();while(!isdigit(c)) {if(c=='-') f=-1;c=getchar();}while(isdigit(c)) x=(x<<3)+(x<<1)+c-'0',c=getchar();return x*f;
}
int a[N];
struct Seg{int l,r,sum,lazy,maxx,add;Seg *ls,*rs;
}root;
inline void Update(Seg *k){if(k->ls==NULL) return;k->sum=k->ls->sum+k->rs->sum;k->maxx=max(k->ls->maxx,k->rs->maxx);
}
inline void Pushdown_MOD(Seg *k){if(k->lazy==-1) return;if(k->ls!=NULL){k->ls->lazy=k->lazy;k->ls->maxx=k->lazy;k->ls->sum=(k->ls->r-k->ls->l+1)*k->lazy;}if(k->rs!=NULL){k->rs->lazy=k->lazy;k->rs->maxx=k->lazy;k->rs->sum=(k->rs->r-k->rs->l+1)*k->lazy;}k->lazy=-1;
}
inline void Pushdown_Add(Seg *k){if(k->add==0) return;if(k->ls!=NULL){k->ls->add+=k->add;k->ls->maxx+=k->add;k->ls->sum+=(k->ls->r-k->ls->l+1)*k->add;}if(k->rs!=NULL){k->rs->add+=k->add;k->rs->maxx+=k->add;k->rs->sum+=(k->rs->r-k->rs->l+1)*k->add;}k->add=0;
}
inline void Pushdown(Seg *k){Pushdown_MOD(k);Pushdown_Add(k);
}
void maketree(int l,int r,Seg *k){k->l=l;k->r=r;k->add=0;if(l==r){k->sum=0;k->maxx=0;return;}int mid=l+r>>1;k->ls=new(Seg);k->rs=new(Seg);maketree(l,mid,k->ls);maketree(mid+1,r,k->rs);Update(k);
}
void remake(Seg *k){k->lazy=-1;k->add=0;if(k->l==k->r){k->sum=k->maxx=a[k->l];return;}remake(k->ls);remake(k->rs);Update(k);
}
void Delete(Seg *k){if(k->ls!=NULL){Delete(k->ls);}if(k->rs!=NULL){Delete(k->rs);}delete(k);
}
void Add(int x,int v,Seg *k){if(k->l==k->r){k->sum+=v;return;}int mid=(k->l+k->r)>>1;if(x<=mid) Add(x,v,k->ls);else Add(x,v,k->rs);Update(k);
}
int Query(int x,int y,Seg *k){if(x<=k->l && y>=k->r){return k->sum;}int mid=(k->l+k->r)>>1,t;Pushdown(k);Update(k);if(y<=mid) t=Query(x,y,k->ls);else if(x>mid) t=Query(x,y,k->rs);else t=Query(x,y,k->ls)+Query(x,y,k->rs);Pushdown(k);Update(k);return t;
}
int Query_MAX(int x,int y,Seg *k){if(x<=k->l && y>=k->r){return k->maxx;}Pushdown(k);int mid=(k->l+k->r)>>1;if(y<=mid) return Query_MAX(x,y,k->ls);if(x>mid) return Query_MAX(x,y,k->rs);return max(Query_MAX(x,y,k->ls),Query_MAX(x,y,k->rs));
}
void Modify(int x,int v,Seg *k){if(k->l==k->r){k->sum=v;k->maxx=v;return;}int mid=(k->l+k->r)>>1;if(x<=mid) Modify(x,v,k->ls);else Modify(x,v,k->rs);Update(k);
}
void Modify_Seq(int x,int y,int v,Seg *k){if(k->l>=x && k->r<=y){k->lazy=v;k->maxx=v;k->sum=(k->r-k->l+1)*v;return;}Pushdown(k);int mid=(k->l+k->r)>>1;if(y<=mid) Modify_Seq(x,y,v,k->ls);else if(x>mid) Modify_Seq(x,y,v,k->rs);else Modify_Seq(x,y,v,k->ls),Modify_Seq(x,y,v,k->rs);Update(k);
}
void Add_Seq(int x,int y,int v,Seg *k){if(k->l>=x && k->r<=y){k->add=k->add+v;k->maxx=k->maxx+v;k->sum=k->sum+(k->r-k->l+1)*v;return;}Pushdown(k);Update(k);int mid=(k->l+k->r)>>1;if(y<=mid) Add_Seq(x,y,v,k->ls);else if(x>mid) Add_Seq(x,y,v,k->rs);else Add_Seq(x,y,v,k->ls),Add_Seq(x,y,v,k->rs);Pushdown(k);Update(k);
}
main(){
return 0;
}

Duan2baka的线段树模板!相关推荐

  1. hdu1156(简单线段树 模板题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  2. 线段树模板hdu 1754:I Hate It

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  3. hdu1754 I hate it线段树模板 区间最值查询

    题目链接:这道题是线段树,树状数组最基础的问题 两种分类方式:按照更新对象和查询对象 单点更新,区间查询; 区间更新,单点查询; 按照整体维护的对象: 维护前缀和; 维护区间最值. 线段树模板代码 # ...

  4. 【AHOI2009】【BZOJ1798】Seq 维护序列seq(线段树模板,易错提醒)

    problem 给定一个长为n的序列,m次询问 每次询问有3种操作 1.一段区间全部乘一个值 2.一段区间全部加一个值 3.询问一段区间和%P solution 不就一颗线段树么,看朕10分钟A掉.. ...

  5. 洛谷3373 线段树模板

    题目详情:https://www.luogu.org/problemnew/show/P3373 这个线段树模板写的头疼(最后纠错发现一个long long没开差点一口血喷出来),思路就是在普通的求区 ...

  6. ccf除法-线段树模板

    这题的要求是对区间处理,查询区间和,一看就是线段树模板题,下面是代码 #include<iostream> using namespace std; int pp[100001]; str ...

  7. 【线段树】[LUOGU 守墓人] [LUOGU 维护序列] 线段树模板题

    题目: 题目链接:[LUOGU 守墓人] 题解: 线段树单点修改,区间修改,单点查询,区间查询,一系列线段树基本操作,模板打就好. (回头再补一个分块和树状数组的这种板子题,就是用分块和树状数组再写一 ...

  8. 线段树模板题3:区间染色问题

    1.3线段树模板题3:区间染色问题 在DotA游戏中,帕吉的肉钩实际上是大多数英雄中最恐怖的东西.挂钩由长度相同的几个连续的金属棍组成. 现在,帕吉(Pudge)希望对挂接进行一些操作. 让我们将钩子 ...

  9. Just a Hook(线段树模板)

    题意 n个铜棒子,对其进行区间修改,将区间中的棒子价值增加,问最后所有棒子的总价值是多少. 铜棒:1 银棒:2 金棒:3 思路 线段树模板题 建树时,每个节点值都为1,对其进行区间修改 最后输出根节点 ...

最新文章

  1. java 图像膨胀与腐蚀程序_膨胀和腐蚀 - 解决图像缺陷问题
  2. 深度学习训练中关于数据处理方式--原始样本采集以及数据增广
  3. iReport 5.添加修改删除jdbc
  4. 目标群体是什么意思_抖音代运营日常主要是做什么的?
  5. 自动化系统计算机网络期末考试题,模拟试卷_计算机网络试题B-自动化-孙璐
  6. (记录)操作多层Iframe嵌套内的元素
  7. Python 解析百度,搜狗词库
  8. Android反编译实战-去广告
  9. 基于vue开发一个组件库
  10. Centos7修改IP地址
  11. Linux 音频系统简析
  12. 易经- 第一卦 乾卦
  13. chatGPT 与文言一心的对比
  14. 3.6.2 找出分区的主副本
  15. python如何实现电子邮件的发送
  16. 图像修复序列——混合稀疏表示(Hybrid Sparse Representations)模型
  17. 程序员在家办公太无聊,推荐你看完这十部电影。收货满满
  18. 【高考那些事】准大学生看过来,选择方向和未来,自己把握
  19. 【QGIS入门实战精品教程】5.2:QGIS自定义坐标系案例教程
  20. 带你重新认识一个不太正经的HTML

热门文章

  1. PMP笔记-挣值计算公式汇总
  2. AI的新增功能(定义图案)(描边渐变)(图像描摹)5.1
  3. 信息学奥赛一本通 1280:滑雪(evd)
  4. nginx 访问 .php文件变成下载
  5. PySpark求解连通图问题
  6. Java Stream流习题答案
  7. 美国科技大亨换儿子血浆实现“永葆青春”?
  8. 【aigc辅助绘画流程】blender+stableDiffusion+chatgpt辅助建立3D插画背景
  9. JVM 堆(heap)详解
  10. HFSS仿真平行线定向耦合器学习笔记