# 解题报告：区间求和 I

http://www.lintcode.com/zh-cn/problem/interval-sum/
/**
* Definition of Interval:
* classs Interval {
*     int start, end;
*     Interval(int start, int end) {
*         this->start = start;
*         this->end = end;
*     }
*/

class Solution {
public:
/**
*@param A, queries: Given an integer array and an query list
*@return: The result list
*/
vector<long long> intervalSum(vector<int> &A, vector<Interval> &queries) {
// write your code here
SegmentTreeNode * root = build(0, A.size() - 1, A);

vector<long long>  d;
for (int i = 0; i<queries.size(); i++){
d.push_back(query(root, queries[i].start, queries[i].end));
}
return d;
}
SegmentTreeNode * build(int start, int end, vector<int> &A) {
// write your code here
if (start>end)return NULL;
int mid = start + (end - start) / 2;
if (start  == end)return new SegmentTreeNode(start, end, A[start] );
SegmentTreeNode *left = build(start, mid, A);
SegmentTreeNode *right = build(mid + 1, end, A);
SegmentTreeNode *stn = new SegmentTreeNode(start, end, left->max + right->max);
stn->left = left;
stn->right = right;
return stn;
}
unsigned int query(SegmentTreeNode *root, int start, int end) {
// write your code here
if (root == nullptr)return 0;
SegmentTreeNode *left = root->left, *right = root->right;
if (end<root->start)return 0;//end超出了最左
if (start>root->end)return 0;//start超出了最右
if (start<root->start)start = left->start;//start超出了最左
if (end>root->end)end = right->end;//end超出了最右
if (start == root->start&&end == root->end)return root->max;
if (left->end >= end){//完全左侧
return query(left, start, end);
}
if (right->start <= start){//完全右侧
return query(right, start, end);
}
return  query(left, start, left->end)+query(right, right->start, end);//左右之间都有
}
};


• 本文已收录于以下专栏：

## lintcode-区间求和I-206

/** * Definition of Interval: * public classs Interval { * int start, end; * Interval(in...

## Leetcode #40. Combination Sum II 组合求和2 解题报告

1 解题思想这道题是昨天的升级版，先看看这个 Leetcode #39. Combination Sum 组合求和 解题报告这道题的改变就是每个位置的数只能用一次了，但是如果本身就给了多个的话就无...
• MebiuW
• 2016年04月11日 23:57
• 528

## 团体程序设计天梯赛-练习集 L1-009. N个数求和 重载+运算符 解题报告

L1-009. N个数求和 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 ...

## poj 2689解题报告（区间筛素数，经典）

Prime DistanceTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 4814 Accepted: 1282Descript...

## Leetcode 435. Non-overlapping Intervals 无交叉覆盖区间 解题报告

1 解题思想题目给了一堆区间[起始位置，结束位置] 这些区间可能会有一些交叠的地方（边界相邻不算），现在要求找到一个方法，可以做最少的删除动作，使得剩下的区间都不交叉覆盖，返回那个需要删除的最少次数...
• MebiuW
• 2016年11月06日 14:48
• 1748

## POJ1089解题报告 区间合并

IntervalsTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 5345 Accepted: 2087DescriptionThe...

举报原因： 您举报文章：解题报告：区间求和 I 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)