HDU 1698 JUST A HOOK(线段树)
2011-08-15 17:41
288 查看
原文:http://blog.acmj1991.com/?p=681
题意:dota…类似于给区间染色,后面的颜色覆盖前面的颜色,每种都有自己的价值。问最后总价值
思路:线段树更新线段的值,求总和
以为是从0开始….然后悲剧了
题意:dota…类似于给区间染色,后面的颜色覆盖前面的颜色,每种都有自己的价值。问最后总价值
思路:线段树更新线段的值,求总和
以为是从0开始….然后悲剧了
#include<stdio.h> #include<string.h> #define L(x)(x<<1) #define R(x)(x<<1|1) #define maxN 100010 int num; struct node{ int l,r,k; }po[4*maxN]; void Build_tree(int st,int l,int r) { po[st].l=l,po[st].r=r,po[st].k=1; if(l==r)return ; int mid=(l+r)>>1; Build_tree(L(st),l,mid); Build_tree(R(st),mid+1,r); } void add(int l,int r,int value,int st) { if(po[st].l==l&&po[st].r==r) { po[st].k=value; return ; } if(po[st].k==value)return ; if(po[st].k>0)po[R(st)].k=po[L(st)].k=po[st].k; po[st].k=0; int mid=(po[st].r+po[st].l)>>1; if(r<=mid){ add(l,r,value,L(st)); } else if(l>mid){ add(l,r,value,R(st)); } else{ add(l,mid,value,L(st)); add(mid+1,r,value,R(st)); } } int get_sum(int st) { if(po[st].k!=0||po[st].r==po[st].l) return po[st].k*(po[st].r-po[st].l+1); return get_sum(L(st))+get_sum(R(st)); } int main() { int t,n,m,x,y,z; scanf("%d",&t); for(int j=1;j<=t;j++) { printf("Case %d: The total value of the hook is ",j); num=0; scanf("%d%d",&n,&m); Build_tree(1,1,n); while(m--){ scanf("%d%d%d",&x,&y,&z); add(x,y,z,1); } printf("%d.\n",get_sum(1)); } }
相关文章推荐
- 【解题报告】 HDU 1698 Just a Hook 线段树 (线段替换) 插线问线 + 延时标记
- HDU 1698 Just a Hook(线段树区间更新)
- HDU 1698 - Just a Hook(线段树区间更新)
- hdu 1698 Just a Hook(线段树成)
- HDU 1698 just a hook 线段树,区间定值,求和
- HDU 1698 Just a Hook(线段树的区间更新)
- hdu 1698 Just a Hook(线段树)
- Just a Hook (hdu 1698 线段树区间更新)
- HDU-1698-Just a Hook(线段树 区间维护)
- hdu 1698 Just a Hook (线段树---成段更新)
- hdu 1698:Just a Hook(线段树,区间更新)
- hdu-------(1698)Just a Hook(线段树区间更新)
- hdu-1698 Just a Hook(线段树成段更新)
- hdu 1698 Just a Hook(线段树的区间更新及求和)
- hdu1698 Just a Hook 线段树
- 线段树(区间更新与区间查询)——Just a Hook ( HDU 1698 )
- HDU - 1698 Just a Hook(线段树)
- HDU 1698 Just a Hook(线段树延迟更新)
- HDU - 1698 Just a Hook(线段树区间更新)
- hdu1698 Just a Hook (线段树功能:成段替换,总区间求和)