hdu1698 线段树成段更新
来源:互联网 发布:淘宝发货地可以改吗 编辑:程序博客网 时间:2024/06/14 11:07
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698
成段更新 (通常这对初学者来说是一道坎),需要用到延迟标记(或者说懒惰标记 ),简单来说
就是每次更新的时候不要更新到底 ,用延迟标记使得更新延迟到下次需要更新or询问到的
时候
#include <iostream>#include<cstdio>#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;const int maxn=2e5;int sum[maxn<<2],col[maxn<<2];void Pushup(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1];}void build(int l,int r,int rt){ col[rt]=0; if(r==l){ sum[rt]=1; return; } int m=(l+r)>>1; build(lson); build(rson); Pushup(rt);}void Pushdown(int rt,int len){ if(col[rt]) { col[rt<<1]=col[rt<<1|1]=col[rt]; sum[rt<<1]=(len-(len>>1))*col[rt]; sum[rt<<1|1]=(len>>1)*col[rt]; col[rt]=0; }}void update(int v,int L,int R,int l,int r,int rt){ if(L<=l&&R>=r) { sum[rt]=(r-l+1)*v; col[rt]=v; return ; } Pushdown(rt,r-l+1); int m=(l+r)>>1; if(m>=L)update(v,L,R,lson); if(m<R)update(v,L,R,rson); Pushup(rt);}int main(){int t,n,k,i,a,b,v;int ans=0;while(~scanf("%d",&t)&&t){ while(t--) { printf("Case %d: ",++ans); scanf("%d",&n); build(1,n,1); scanf("%d",&k); while(k--) { scanf("%d %d %d",&a,&b,&v); update(v,a,b,1,n,1); } printf("The total value of the hook is %d.\n",sum[1]); }} return 0;}
阅读全文
0 0
- hdu1698 线段树成段更新
- 【HDU1698】【线段树成段更新】
- hdu1698 线段树成段更新
- hdu1698(线段树成段更新+lazy标记)
- HDU1698 Just a Hook 线段树成段更新
- HDU1698 Just a Hook 线段树成段更新
- 【hdu1698-Just aHook】(线段树成段更新)
- HDU1698线段树区间更新
- hdu1698 线段树区间更新
- hdu1698 线段树 区间更新
- HDU1698线段树区间更新
- hdu1698(线段树区间更新)
- 线段树区间更新hdu1698
- hdu1698 线段树区间更新
- HDU1698 线段树 区间更新
- Hdu1698 Just a Hook(线段树成段更新)
- 【线段树成段更新-模板】【HDU1698】Just a Hook
- hdu1698 Just a Hook(线段树成段更新lazy)
- IOS开发-基于WebDriverAgent代理服务,实现iOS手机app自动化测试的框架搭建
- CDOJ1061-秋实大哥与战争 线段树区间合并问题(求最长连续区间长度)
- 网易 | 数据结构和算法 | 学习笔记01:绪论
- TCHAR和CHAR间的互相转换
- Android签名相关知识整理
- hdu1698 线段树成段更新
- Centos 6.9 Install gitlab 9.2
- Deepin linux系统连不上网解决
- 8.5.5 可变个数参数的函数
- Thrift基础
- mac使用Shell(终端)SSH连接远程服务器
- JQuery的toggle()方法把元素隐藏了的解决方案
- 网络基础 — 浅析TCP协议中的3次握手和4次挥手
- 饼状图