
线段树
YouthDance
JUST DO IT
展开
-
Just a Hook HDU 1698
基础线段树,插线问线 这道题是成段更新,使用延迟标记,对于当前的left=r直接返回,(等到找到叶子结点时候,在开始向上回溯对父亲结点进行结点求和,算值;(1))等到下次更新搜索到时候才向下更新. 即:T[root].val=T[L(root)].val+T[R(root)].val; #include#include#define L(t)(t<<1)#def原创 2013-05-05 08:57:36 · 760 阅读 · 0 评论 -
HDU1166 敌兵布阵
HDU1166敌兵布阵基础线段树,插点问线//线段树,基础的插点问线#include#include#define L(t)(t<<1)#define R(t)(t<<1|1)#define MID(a,b)((a+b)>>1)const int MAX=50002;struct Tree{ int l,r,sum;}T[MAX<<2];int n,ans,a[原创 2013-04-30 10:32:43 · 678 阅读 · 0 评论 -
poj 2299 Ultra-QuickSort
poj 2299 Ultra-QuickSort结合各位大牛的博客后,终于完成了首题线段树的学习。如有错误还望大牛们斧正。#include#include#include#define L(t)(t<<1)#define R(t)(t<<1|1)#define Mid(a,b)((a+b)>>1)using namespace std;const int MAXN=原创 2013-04-27 17:31:19 · 674 阅读 · 0 评论 -
HDU1754 I hate it
HDU 1754 I hate it RunError33次后才AC的,坑爹的题啊; 虽然是简单的线段树,但在处理上却不能用递归的方法,只能用循环或者用邻接表;两种的具体实现自己看下面代码吧!!!循环:#include#include#define L(t)(t<<1)#define R(t)(t<<1|1)#define MAX 200005struct Node{原创 2013-05-06 20:43:22 · 706 阅读 · 0 评论 -
Minimum Inversion Number HDU
其实,在刚开始接触线段树的时候,学长给我们讲用线段树解决问题的第一道题就是 求逆序数 到那时候一直不理解为什么线段树可以解决。直到这次暑假集训有时间了才花了好长时间,最后还是在别人的解题报告中明白了线段树的神妙之处。 ok,言归正传。来说说这道题吧,这道题虽说不是什么难题,但对于刚刚接触线段树的人来说,可以说是一个噩梦。由于个人难以讲清其中的缘由,下面我就用我摘抄的一个讲解给大家分析吧。原创 2013-07-11 16:41:33 · 785 阅读 · 0 评论 -
树状数组
树状数组 很显然是动态规划。dp[i]表示前i个数有多少个有效的子序列。那么 dp[i]=dp[i-1]+A。 A是前面i-1个数中,与i的差值不超过d的以该数结尾的有效的子序列的个数 的和。我们可以用另外一个数组sub[i]表示以i结尾的有效的子序列的个数。 dp与sub的不同之处是dp中的子序列不一定是以第i个数结尾的。sub[i]= sigma sub[k] ,( abs(num原创 2014-01-08 15:33:07 · 635 阅读 · 0 评论