摘要: 基础的线段树区间修改和区间求和贴代码吧#include <stdio.h>#define N 100010struct Node{ int l,r; __int64 c,sum;//用c来存储在这个节点存储的增值,用sum来存储在该节点对应的区间上的和。 }p[3*N];int que[N];void build(int k,int s,int t){ int kl,kr,mid; p[k].l=s;p[k].r=t;p[k].c=0; p[k].sum=que[s]; if(s==t) return ; mid=(s+t)>>1;kl=k<<1;kr=kl 阅读全文
posted @ 2011-04-28 21:47 枕边梦 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 先来谈谈lazy思想。做了这么多的线段树,应该总结一下,lazy是一个很经典的思想。所谓lazy,就是懒惰,每次不想做太多,只要插入的区间完全覆盖了当前结点所管理的区间就不再往下做了,在当前结点上打上一个lazy标记,然后直接返回。下次如果遇到当前结点有lazy标记的话,直接传递给两个儿子,自己的标记清空。这样做肯定是正确的。我们以染色为例,可以这样想,如果当前结点和它的子孙都有lazy标记的话,必定是子孙的先标记,因为如果是自己先标记,那么在访问子孙的时候,必定会将自己的标记下传给儿子,而自己的标记必定会清空,那么lazy标记也就不存在了。所以可以肯定,当前的lazy标记必定覆盖了子孙的,. 阅读全文
posted @ 2011-04-28 21:37 枕边梦 阅读(901) 评论(0) 推荐(0) 编辑