Segment Tree with Lazy
2014-08-29 11:28
190 查看
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct node{ int l, r, s; }num[800005]; int n, m, key; void build(int l,int r,int k) { num[k].l = l; num[k].r = r; num[k].s = 0; if(l == r) { num[k].s = 1; return; } int mi = (l+r)>>1; build(l,mi,k+k); build(mi+1,r,k+k+1); return; } void update(int l, int r, int k) { if(num[k].s) { num[k+k].s = num[k+k+1].s = num[k].s; num[k].s = 0; } if(num[k].l == l && num[k].r == r) { num[k].s = key; return; } int mi = (num[k].l+num[k].r)>>1; if(l > mi) update(l,r,k+k+1); else if(r <= mi) update(l,r,k+k); else { update(l,mi,k+k); update(mi+1,r,k+k+1); } return; } int query(int k) { if(num[k].s) return (num[k].r-num[k].l+1)*num[k].s; else return query(k+k)+query(k+k+1); } int main() { int Case; int a, b; scanf("%d",&Case); for(int j=1;j<=Case;j++) { memset(num,0,sizeof(num)); scanf("%d",&n); build(1,n,1); scanf("%d",&m); while(m--) { scanf("%d%d%d",&a,&b,&key); update(a,b,1); } printf("Case %d: The total value of the hook is %d.\n",j,query(1)); } return 0; }
Code From Hdu1698
相关文章推荐
- SPOJ 11840. Sum of Squares with Segment Tree (线段树,区间更新)
- 线段树--segment_tree--lazy_tag
- SPOJ 11840. Sum of Squares with Segment Tree (线段树,区间更新)
- 树型dp hdu5834 Magic boy Bi Luo with his excited tree
- Processing XML in Python with ElementTree
- 线段树(Segment Tree)
- hdu 5423 Rikka with Tree(思路)
- hdu5423 Rikka with Tree
- FW-binary - tree - with id and sibling connected - java version 2013年12月18日1:21
- hdu 5086 Revenge of Segment Tree(BestCoder Round #16)
- HDU-5086-Revenge of Segment Tree
- TreewithCheckbox例子
- *[Lintcode]Segment Tree Build II
- POJ 3468 A Simple Problem with Integers(段更新的区间求和&Lazy思想&线段树)
- ch4.6: find the LCA of 2 nodes in a binary tree with 3 different methods
- Segment Tree介绍与使用
- 克隆一个有随机指针的二叉树 Clone a Binary Tree with Random Pointers
- Segment Tree Template
- 线段树(segment tree)
- Magic boy Bi Luo with his excited tree