继续看NotOnlySuccess有关线段树的讲解...先头捣腾了一下线段树单位点更新的问题...刚才看了一段一段更新的问题..A了一道模板题(http://acm.hdu.edu.cn/showproblem.php?pid=1698)..
总的来说一段一段的更新和只更新单位点的差别不是很大...不同的地方主要是在更新树的时候...也就是Update时..先贴一下Update的程序段
void update(int L,int R,int data,int l,int r,int sp) { if (L<=l && R>=r) { col[sp]=data; sum[sp]=data*(r-l+1); return; } PushDown(sp,r-l+1); /// 重点.. int Mid=(l+r)/2; if (Mid>=L) updata(L,R,data,l,Mid,sp*2); if (Mid< R) updata(L,R,data,Mid+1,r,sp*2+1); sum[sp]=sum[sp*2]+sum[sp*2+1]; }
void PushDown(int sp,int data) { if (col[sp]) { col[sp*2]=col[sp]; col[sp*2+1]=col[sp]; sum[sp*2]=(data-data/2)*col[sp]; sum[sp*2+1]=(data/2)*col[sp]; col[sp]=0; } }