区间求和Ⅱ
来源:互联网 发布:java框架源码 编辑:程序博客网 时间:2024/05/17 07:47
在类的构造函数中给一个整数数组, 实现两个方法query(start, end)
和 modify(index, value)
:
- 对于 query(start, end), 返回数组中下标 start 到 end的 和。
- 对于 modify(index, value), 修改数组中下标为 index上的数为 value.
样例
给定数组 A = [1,2,7,8,5]
.
query(0, 2)
, 返回10
.modify(0, 4)
, 将 A[0] 修改为 4.query(0, 1)
, 返回6
.modify(2, 1)
, 将 A[2] 修改为 1.query(2, 4)
, 返回14
.
class Solution {private: struct segmentTreeNode{ int start,end; long long val; segmentTreeNode *left,*right; segmentTreeNode(int l,int r): start(l),end(r),left(0),right(0){} }; segmentTreeNode* build(int lo,int hi){ if(lo>hi) return NULL; segmentTreeNode* root=new segmentTreeNode(lo,hi); if(lo==hi) return root; int mid=lo+(hi-lo)/2; root->left=build(lo,mid); root->right=build(mid+1,hi); return root; } long long query(segmentTreeNode*root,int low,int high){ if(low>high) return 0; if(low==root->start&&high==root->end){ return (long long)root->val; } int mid=root->start+(root->end-root->start)/2; long long res=query(root->left,low,min(mid,high))+query(root->right,max(low,mid+1),high); return res; } void getsum(segmentTreeNode *root,int i,int value){ if(root->start==root->end){ root->val=value; return; } int mid=root->start+(root->end-root->start)/2; if(i<=mid) getsum(root->left,i,value); else getsum(root->right,i,value); root->val=root->left->val+root->right->val; return; } vector<int>v;segmentTreeNode *root;public: Solution(vector<int> A) { v=A; root=build(0,A.size()-1); for(int i=0;i<A.size();i++) modify(i,A[i]); } long long query(int low, int high) { return query(root,low,high); } void modify(int index, int value) { v[index]=value; //root=build(0,v.size()-1); getsum(root,index,value); }};
0 0
- 区间求和Ⅱ
- 区间求和
- 树状数组--区间求和
- 线段树区间求和
- 题目:区间求和 I
- 区间求和 I
- 【POJ3067】Japan-区间求和
- LintCode:区间求和
- LintCode:区间求和 II
- 树状数组,区间求和
- 区间求和 I -LintCode
- 区间求和 II -LintCode
- lintcode--区间求和 I
- 区间求和II
- 树状数组 区间更新 区间求和
- poj3468(树状数组:区间修改 区间求和)
- 树状数组 区间更新 区间求和
- 线段树(区间修改,区间求和)
- Hbase
- IDE工具 - VS2012中NuGet安装第三方库
- JavaScript DOM 扩展
- IOS开发-自动布局之autoresizingMask使用详解(Storyboard&Code)
- 广播工具箱
- 区间求和Ⅱ
- GC overhead limit exceeded : Spark
- 浅析Android系统属性SystemProperties
- 一个经典例子让你彻彻底底理解java回调机制
- Notification(通知)的使用简介
- 尺寸工具箱DimenUtils
- curl抓取
- CDH离线安装成功,Mark下,20151012
- iOS图片处理,截图,缩放,存储