线段树
xindoo
10年技术博主,博客专家,曾就职于阿里 小米,目前任贝壳资深工程师。拥有运维、搜索广告、后端业务相关工作经验,擅长Java、Lniux、Redis……
展开
-
hdoj 1166 敌兵布阵
暴力超时,这道题可以用线段树做,因为更新的是单个节点,我们也可以用数组数组来做,我将两种方法的代码都给出 数组数组最适宜的用途就是区间求和和点的更新,但树状数组并不适用于区间的更新问题,也不是做不到,比较麻烦且难理解,有兴趣的可以看看这个http://blog.csdn.net/xindoo/article/details/8748410//树状数组#include原创 2013-04-01 21:31:20 · 1119 阅读 · 0 评论 -
线段树区间修改和点修改 hdoj 1698(区间修改)、hdoj 1754(点修改)
这两题我都在之前做过,但并未通过,那次做的时候是刚开始接触线段树,现在有了一点点的了解,翻出以前的代码稍作修改就AC了。之前1698错误的原因是没有注意到位运算的优先级。//hdoj 1698#include#include#define maxn 100010struct node{ int l; int r; int mid; int val;原创 2013-01-08 21:31:28 · 1681 阅读 · 1 评论 -
poj 2182 Lost Cows(树状数组)
题目链接DescriptionN (2 <= N <= 8,000) cows have unique brands in the range 1..N. In a spectacular display of poor judgment, they visited the neighborhood 'watering hole' and drank a few too man原创 2013-04-06 09:57:40 · 2182 阅读 · 0 评论 -
codeforces 272C. Dima and Staircase(线段树)
题目链接 题目很长,看加猜加谷歌翻译才看懂了题目。每级台阶的宽都是1,但高不同,并且告诉你了,然后给你m个箱子,长和宽都告诉你,把箱子靠左放,求箱子的底部有多高。 因为都是放在最左边的,所以只要和最左边的高度比较,这样就不用更新线段树了。代码://cf 272 C//2013-05-14-20.26#include using namespace std;原创 2013-05-14 20:28:59 · 2052 阅读 · 0 评论 -
codeforces 339 D.Xenia and Bit Operations(线段树)
这个题目属于线段树的点更新区间查询,而且查的是整个区间,其实不用写query()函数,只需要输出根节点保存的值就可以了。题意: 输入n,m表示有2^n个数和m个更新,每次更新只把p位置的值改成b,然后输出整个序列运算后的值,而这个运算就比较复杂了, 最下面一层两个数字之间或运算得到原来数目一半的数字,然后两个之间异或运算,得到一半,再或再异或………………,一直到得到一个数字,这个数原创 2013-08-27 11:19:47 · 2149 阅读 · 0 评论 -
Light oj 1082 - Array Queries(区间最小值)
题目链接线段树解法#include #include using namespace std;const int maxn = 100010;struct node{ int l, r, mid, minn;}tree[maxn<<2];int a[maxn];void build(int l, int r, int o){ tree[o].l = l原创 2013-04-12 13:24:30 · 2132 阅读 · 0 评论 -
poj 3468 A Simple Problem with Integers线段树区间修改
传送门 题目意思很简单,有N个数,Q个操作, Q l r 表示查询从l到r 的和,C l r v 表示将从l到r 的值加上v,明显的线段树,不知道线段树的人肯定暴力,肯定超时,哈哈!!解题方法我在代码注释中写的很详细了#include const int maxn = 100005; typedef __i原创 2013-04-01 20:07:09 · 1339 阅读 · 0 评论