HDU 1698 Just a Hook(线段树成段更新)
2015-04-06 14:42
423 查看
#include "string" #include "iostream" #include "cstdio" #include "cmath" #include "algorithm" #define INF 0x3f3f3f3f #define INFL 0x3f3f3f3f3f3f3f3fLL using namespace std; typedef long long LL; const int M=55; #define lson l , m , rt << 1 #define rson m + 1 , r , rt << 1 | 1 const int maxn = 111111; int h , w , n; int col[maxn<<2]; int sum[maxn<<2]; void PushUp(int rt) { sum[rt] = sum[rt<<1] + sum[rt<<1|1]; } //懒人标记 void PushDown(int rt,int m) { if (col[rt]) { col[rt<<1] = col[rt<<1|1] = col[rt]; sum[rt<<1] = (m - (m >> 1)) * col[rt]; sum[rt<<1|1] = (m >> 1) * col[rt]; col[rt] = 0; } } void build(int l,int r,int rt) { col[rt] = 0; sum[rt] = 1; if (l == r) return ; int m = (l + r) >> 1; build(lson); build(rson); PushUp(rt); } void update(int L,int R,int c,int l,int r,int rt) { if (L <= l && r <= R) { col[rt] = c; sum[rt] = c * (r - l + 1); return ; } PushDown(rt , r - l + 1); int m = (l + r) >> 1; if (L <= m) update(L , R , c , lson); if (R > m) update(L , R , c , rson); PushUp(rt); } int main() { int T , n , m; scanf("%d",&T); for (int cas = 1 ; cas <= T ; cas ++) { scanf("%d%d",&n,&m); build(1 , n , 1); while (m --) { int a , b , c; scanf("%d%d%d",&a,&b,&c); update(a , b , c , 1 , n , 1); } printf("Case %d: The total value of the hook is %d.\n",cas , sum[1]); } return 0; }
线段树成段更新的应用,需要用到惰性标记,,多开一个数组,以及区分于单点更新不同。。还是挺好理解的。
相关文章推荐
- hdu 1698 Just a Hook 线段树 成段更新
- HDU1698 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 线段树,成段更新
- hdu 1698 Just a Hook(线段树成段更新lazy)
- hdu-1698 Just a Hook(线段树成段更新)
- HDU 1698 Just a Hook [线段树-成段更新]
- hdu 1698 Just a Hook[线段树,updata成段更新]
- hdu 1698 Just a Hook (线段树)(第二部分 成段更新)
- hdu 1698 Just a Hook 线段树成段更新
- hdu 1698 Just a Hook(线段树 成段更新+总区间求和)
- [线段树 段更新] HDU - 1698 E - Just a Hook
- 线段树成段更新 hdu 1698 Just a Hook
- HDU 1698 Just a Hook (线段树 成段更新)
- hdu 1698 Just a Hook(线段树 成段更新)
- HDU 1698 Just a Hook(线段树成段更新)