
线段树初级
readlnh
这个作者很懒,什么都没留下…
展开
-
hdu 1166 敌兵布阵
题意 : 敌人有N个工兵营地,接下来有N个正整数,第i个正整数ai代表第i个工兵营地里开始时有ai个人(1 接下来每行有一条命令,命令有4种形式: (1) Add i j,i和j为正整数,表示第i个营地增加j个人(j不超过30) (2)Sub i j ,i和j为正整数,表示第i个营地减少j个人(j不超过30); (3)Query i j ,i和j为正整数,i (4)End 表示结束原创 2015-07-16 22:11:12 · 367 阅读 · 0 评论 -
hdu 1754 I Hate It
题意:有两个正整数 N 和 M ( 0 学生ID编号分别从1编到N。 第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩。 接下来有M行。每一行有一个字符 C (只取'Q'或'U') ,和两个正整数A,B。 当C为'Q'的时候,表示这是一条询问操作,它询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少。 当C为'U'的时候,表示这是一条更新原创 2015-07-16 23:49:46 · 570 阅读 · 0 评论 -
hdu 1698 Just a Hook
题意 : 大致是说有三种钩子,铜金银,分别有不同的价值,钩子有不同的覆盖范围,可以切换钩子的状态,问最后钩子的总值是多少 这题转化一下就是问更新某一区间的值,求该区间的总和,也就是线段树的成段更新。 代码: #include #include using namespace std; int sum[100000 << 2]; int v[100000 << 2]原创 2015-07-17 00:26:05 · 374 阅读 · 0 评论 -
线段树小结
因为要给大一讲课,所以又把线段树的模板题拿出来做了一下。 中所周知,线段树是用来处理区间的利器,这是因为它把区间按二分的思想分成一个个小段,使得我们用lgn的复杂度就能查询一个区间(例如最大值,最小值,和等等) 它的结构如下图所述: 我们可以看到,对于一个节点root,它的左子树下标为root*2,右子树下标为root*2+1。 实际上,由于线段树的父节点区间是平均原创 2016-04-19 16:24:07 · 321 阅读 · 0 评论