线段树模板
来源:互联网 发布:淘宝怎么上传宝贝详情 编辑:程序博客网 时间:2024/05/04 22:01
#include<stdio.h>#include<algorithm>#include<string.h>#define ll __int64#define M 100007using namespace std;struct node{ ll l,r,mid,val,mark;}tree[M<<2];ll s[M];void build(ll left,ll right,ll i)//建树{ tree[i].l=left;tree[i].r=right; tree[i].mid=(left+right)>>1;tree[i].mark=0; if(left==right){tree[i].val=s[left]; return;} build(left,tree[i].mid,i*2); build(tree[i].mid+1,right,i*2+1); tree[i].val=tree[i*2].val+tree[i*2+1].val;}void update(int pos,ll val,int i)//点更新{ tree[i].val+=val; if(tree[i].l==tree[i].r)return; if(pos<=tree[i].mid)update(pos,val,i*2); else update(pos,val,i*2+1);}ll query(int left,int right,int i)//点查询{ if(tree[i].l==left&&tree[i].r==right)return tree[i].val; if(right<=tree[i].mid)query(left,right,i*2); else if(left>tree[i].mid)query(left,right,i*2+1); else return query(left,tree[i].mid,i*2)+query(tree[i].mid+1,right,i*2+1);}void update(int left,int right,ll val,int i)//区间更新{ if(tree[i].l==left&&tree[i].r==right){tree[i].mark+=val;return;} tree[i].val+=val*(right-left+1); if(tree[i].mid<left)update(left,right,val,2*i+1); else if(tree[i].mid>=right)update(left,right,val,2*i); else { update(left,tree[i].mid,val,2*i); update(tree[i].mid+1,right,val,2*i+1); }}ll query(int left,int right,int i)//区间查询{ if(tree[i].l==left&&tree[i].r==right) return tree[i].val+tree[i].mark*(right-left+1); if(tree[i].mark!=0) { tree[i*2].mark+=tree[i].mark;tree[i*2+1].mark+=tree[i].mark; tree[i].val+=(tree[i].r-tree[i].l+1)*tree[i].mark;tree[i].mark=0; } if(tree[i].mid>=right){return query(left,right,i*2);} else if(tree[i].mid<left){return query(left,right,i*2+1);} else{return query(left,tree[i].mid,i*2)+query(tree[i].mid+1,right,i*2+1);}}int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF) { for(int i=1;i<=n;i++) scanf("%I64d",&s[i]); build(0,M,1); ...... } return 0;}
0 0
- ACM 线段树模板(模板)
- 线段树模板
- hdu_1166_线段树模板
- 线段树模板
- 线段树模板 poj2777
- 线段树模板
- 线段树模板
- 线段树-模板
- 线段树模板
- 线段树模板
- 线段树模板
- Hdu1166-- 线段树模板
- 线段树模板
- 线段树模板
- 线段树模板
- 线段树模板
- 线段树模板
- 线段树模板
- 处理Bitmap出现oom的异常
- iOS 常用框架列表
- 关于Duilib的扩展——“拖放”实现(二)
- [Cocoa]_[初级]_[鼠标移动到NSButton上面和移开NSButton时,控件背景颜色的变化]
- struts使用过滤器解决中文乱码问题
- 线段树模板
- priority_queue的用法
- hdu 1231 最大连续子序列
- Can't add self as subview 的崩溃
- mysql在线修改表结构大数据表的风险与解决办法归纳
- 插入法排序,可用来排序数组
- Linux中更改文件默认权限
- awk笔记
- hdu-1465 不容易系列之一 【排错公式】