线段树&&树状数组
WinJourn
Stay hungry stay foolish
展开
-
POJ 1195 Mobile phones(二维树状数组,点修改,区间查询)
典型的二维树状数组二维树状数组和一维树状数组原理是一样的。我们先回顾一维树状数组 C【maxn】,原创 2015-08-25 11:14:31 · 1219 阅读 · 0 评论 -
RMQ区间最值模板
NYOJ1185来自kuangbin模板#include #define N 1010#define mem(a,x) memset(a,x,sizeof a)using namespace std;#define INF 0x3f3f3f3fconst double eps = 1e-8;typedef long long ll;const int MAXN = 5原创 2016-11-09 11:24:41 · 433 阅读 · 0 评论 -
HDU1540 Tunnel Warfare(线段树+set)
题目链接:HDU 1540题意:题意是一条线上的点,D x是破坏这个点,Q x是表示查询以x所在的最长的连续的点的个数,R是恢复上一次破坏的点。最近在做线段树的专题,碰巧做到了这题,自己没有想出思路,百度出来的题解也没有认真看。。这次回来又想了一下,查询最长连续点的个数,也就是查询其左右两边最近的破坏点的坐标,然后求差就是所求个数了。直接将破坏的数储存在数组二分不就出来原创 2016-01-01 23:07:43 · 686 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers(线段树区间修改)
给出了一个序列,你需要处理如下两种询问。"C a b c"表示给[a, b]区间中的值全部增加c (-10000 ≤ c ≤ 10000)。"Q a b" 询问[a, b]区间中所有值的和。原创 2015-08-24 19:16:25 · 547 阅读 · 0 评论 -
HDU 1698 Just a Hook (线段树区间修改)
在Dota里面有个角色叫屠夫,他的武器是 Meat Hook,对所有的英雄都有着致命的威胁, Meat Hook 由一系列连续金属构成(假设有N块金属),金属有 铜 ,银 ,金 三种,分别对应价值 1 2 3。开始的时候 Meat Hook 都是由 铜 构成,(也就是每一节金属价值都是 1,总价值为N*1),现在我们给出一些操作,让给定区间的 Meat Hook 改变金属等级 ,求出最终整个 Meat Hook的价值;原创 2015-08-24 17:30:21 · 832 阅读 · 0 评论 -
POJ 2155 Matrix (二维树状数组,区间更新,点查找)
题目链接:POJ 2155 Matrix楼教主出的题。【题目大意】给你你 N x N的矩形区域, 开始时每个点的值都为0有两种操作C x1 y1 x2 y2 将区域 x1 到 x2 y1 到 y2 围成的矩形区域的值翻转 (1变0 ,0变1);Q x1,y1,输出 (x1,y1)的值;典型的区间更新,点查找的题目相应的一维树状数组题目HDU 1556原创 2015-08-26 15:50:56 · 953 阅读 · 0 评论 -
HDU 3874 Necklace(树状数组的离线操作)
题目链接:HDU 3874 Necklace【题目大意】组成项链的珠子有品级之分,价值从1~1000000不等,然而珠子的价值会有重复,例如一个项链有这6个珠子构成 1 1 1 2 3 1,我们要求给定区间珠子的价值总和,如果区间内有相同价值的珠子,则只计算相同价值珠子中的一个;用 F(左区间,右区间),来求区间和。例如 F(1,3)=1, F(2,4)=原创 2015-08-25 10:44:08 · 770 阅读 · 0 评论 -
POJ 2001 Shortest Prefixes (字典树 TRIE)
给你一些单词,让你求出他们最短的前缀,当然,这个前缀不能有歧义,例如给出单词 carton cart carcarton的 前缀 就不能是cart,因为cart的前缀是cart,同理cart的前缀也不能是car。要找到每个单词独一无二且是最短的前缀,car的前缀不能是,”c“ “ca” ,因为他们在别的单词中也有出现,如果找不到独一无二,那个这个单词本身就是他自己的前缀。原创 2015-08-18 22:31:44 · 3365 阅读 · 2 评论 -
NYOJ 116 士兵杀敌 (线段树,区间和)
题目链接:NYOJ 116 士兵杀敌士兵杀敌(二)时间限制:1000 ms | 内存限制:65535 KB难度:5描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的原创 2015-08-21 08:26:15 · 1185 阅读 · 0 评论 -
HDU 1166 敌兵布阵 (树状数组)
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少人,例如Derek问:“Tidy,马上汇报第3个营地原创 2015-08-18 22:56:02 · 1100 阅读 · 0 评论 -
HDU 1556 Color the ball(树状数组,区间修改,单点统计)
和 HDU1166士兵杀敌 不同 ,士兵杀敌那个题是 单点更新,求区间和这个题目是 区间更新,求单点的值。借用树状数组快速存储数据的结构,染色的时候在左端点+1 , 右端点后面 -1,当统计某个点染色次数的时候,向左边查询即可。POJ 2155 是这个题目的二维版本;原创 2015-08-26 15:50:04 · 834 阅读 · 0 评论 -
线段树或树状数组求逆序数(附例题)
线段树或树状数组求逆序数假设给你一个序列 6 1 2 7 3 4 8 5, 首先我们先手算逆序数, 设逆序数为 N;6的前面没有比他大的数 N +=01的前面有一个比他大的数 N+=12的前面有一个比他大的数 N+=17的前面没有比他大的数 N+=0... 最后得到 N = 0 + 1 + 1 + 0 + 2 + 2 + 0 + 3 = 9其实我们可用用线段树,或者树状数组模拟这个过程。 又因为线段树和树状数组的效率较高,所以可行原创 2015-08-21 13:02:33 · 4008 阅读 · 1 评论 -
POJ 2481 Cows && POJ 2352 Stars(树状数组妙用)
在二维坐标上给出一些星星的坐标,求某一个星星左方,下方,左下方的星星个数。题目已经把星星按照Y坐标从小到大,X从小到大排序。因此,在每次对一个星星进行统计时,之前出现过的星星,只要X坐标比其小,则必在其左,下,左下方。树状数组储存X的坐标。 就像 求逆序数 的方法一样, 统计有多少之前的星星的X坐标小于当前的X坐标。需要注意的是 X 坐标的范围是32000 ,所以树状数组要开到32000 而不是节点数15000。原创 2015-08-25 15:24:02 · 1088 阅读 · 0 评论 -
POJ 2777 Count Color (线段树区间修改 + 状态压缩)
给你 n 块板子, 编号1--n , 板子的颜色最多30种, 初始时 板子的颜色都是 1;有两种操作 1 。把给定区间的板子染成一种颜色 2 。查询给定区间有多少种不同的颜色此题一看便是线段树的区间修改问题 , 然而对于统计有多少种不同颜色 , 开始想用set 来操作, 后来发现用set每次查询都要走到树的叶子节点,并不能运用线段树的高效率查询。 后来学到了 二进制状态压缩的方法 。(又是状态压缩,我怎么没想到捏!)30种颜色 ,我原创 2015-08-21 22:16:32 · 816 阅读 · 0 评论 -
二维线段树
HDU4819模板题lrj带build版本#includeusing namespace std;const int INF = 1<<30;const int maxn = 800*4 + 10; // n==800;int A[maxn][maxn];struct IntervalTree2D { int Max[maxn][maxn], Min[maxn][m原创 2016-11-11 22:55:58 · 435 阅读 · 0 评论