线段树模板(学长给的,自己消化了一下,其实基本上差不多(好吧,一模一样QAQ))
来源:互联网 发布:8090端口是干嘛的 编辑:程序博客网 时间:2024/04/30 01:45
写这个的目的为了以后能再回看一下,哈哈:
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{int l,r,sum,Max,Min;}a[1000<<2];void pushup(int o)//更新数据 {a[o].Max=max(a[o*2].Max,a[o*2+1].Max);a[o].sum=a[o*2].sum+a[o*2+1].sum;a[o].Min=min(a[o*2].Min,a[o*2+1].Min);}void build(int o,int l,int r)//递归建树 {a[o].l=l;a[o].r=r;if(l==r){int t;scanf("%d",&t);a[o].Max=a[o].Min=a[o].sum=t;return ;}int mid=(r+l)/2;build(o*2,l,mid);build(o*2+1,mid+1,r);pushup(o);}void update(int o,int l,int r,int x,int y){if(l==r){a[o].Max=a[o].Min=a[o].sum=y;return ;}int mid=(r+l)/2;if(x<=mid)//二分思想,判断左右区间 update(o*2,l,mid,x,y);else update(o*2+1,mid+1,r,x,y);pushup(o);//更新当前各节点的值 }int Qure(int o,int l,int r,int x,int y)//球x到y区间的和(当然也可以在这里面稍加改变,就可以转变成就最大和最小值) {if(l==x&&r==y){return a[o].sum;}int mid=(l+r)/2;if(y<=mid)//表示要查找的区间在左半部分 return Qure(o*2,l,mid,x,y);else if(x>mid)//表示要查找的区间在右半部分 return Qure(o*2+1,mid+1,r,x,y);else//表示既有左又有右 return Qure(o*2,l,mid,x,mid)+Qure(o*2+1,mid+1,r,mid+1,y);}int main()//主要输入格式 {int n;scanf ("%d",&n);//n表示全部数据的个数 build(1,1,n);//UpDate(1,1,n,2,7);printf ("%d\n",Qure(1,1,n,2,4));return 0;}
阅读全文
0 0
- 线段树模板(学长给的,自己消化了一下,其实基本上差不多(好吧,一模一样QAQ))
- 刚学了链表的生成,遍历,释放,自己将链表的定义给自我解释了一下,也将老师的模板给注释了一下,不知道自己理解的是否正确,求大神指教
- 线段树模板——Orz SWC学长
- 总结一下自己学习语言的经验(给初学者)
- 航海桌面基本上能接近自己设想的程度了
- 最新MDB数据库操作大全(自己搜集整理基本上很全了)
- 谁冤枉了武大(转自《青年周末》,该澄清的事实基本上都给写清楚了……)
- 线段树 自己总结的模板
- 拿到硕士学位了!给自己庆祝一下!
- 终于有自己的Bolg了,庆祝一下先;)
- Vijos P1881 闪烁的繁星 (自己加强了一下。。)
- 做的差不多了
- HDU 4819 Mosaic(二维线段树单点更新+区间查询+自己的写法模板)
- 布置了作业给10的,然后自己写了一下,socket的
- 其实我真是觉得我应该写一篇总结来总结一下自己的生活的了
- 令自己“诧异”的底层函数 -- strcmp (一直以为掌握了,其实没有)
- 线段树(模板)
- 线段树(模板)
- LVM(逻辑卷管理)
- 欢迎使用CSDN-markdown编辑器
- 字符串反转
- 问题 F: 拦截导弹
- 求阶乘
- 线段树模板(学长给的,自己消化了一下,其实基本上差不多(好吧,一模一样QAQ))
- 初学JDBC
- [第七季]4.控制DIV的选取
- 集训第十三天(2017/8/12)刷二分法的题
- 南阳-108-士兵杀敌(一)
- edge浏览器整理收藏夹 找不到收藏夹
- Git使用笔记
- 数组的合并与拆分
- 求最大公约数问题