博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1698 Just a Hook(线段树区间替换)
阅读量:5844 次
发布时间:2019-06-18

本文共 1234 字,大约阅读时间需要 4 分钟。

题目地址:

区间替换裸题。相同利用lazy延迟标记数组,这里仅仅是当lazy下放的时候把以下的lazy也所有改成lazy就好了。

代码例如以下:

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define lson l, mid, rt<<1#define rson mid+1, r, rt<<1|1const int MAXN=1e5+10;int sum[MAXN<<3], lazy[MAXN<<3];void PushUp(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1];}void PushDown(int rt, int m){ if(lazy[rt]) { lazy[rt<<1]=lazy[rt<<1|1]=lazy[rt]; sum[rt<<1]=lazy[rt]*(m-(m>>1)); sum[rt<<1|1]=lazy[rt]*(m>>1); lazy[rt]=0; }}void build(int l, int r, int rt){ lazy[rt]=0; if(l==r) { sum[rt]=1; return ; } int mid=l+r>>1; build(lson); build(rson); PushUp(rt);}void update(int ll, int rr, int x, int l, int r, int rt){ if(ll<=l&&rr>=r) { lazy[rt]=x; sum[rt]=(r-l+1)*x; return ; } PushDown(rt, r-l+1); int mid=l+r>>1; if(ll<=mid) update(ll,rr,x,lson); if(rr>mid) update(ll,rr,x,rson); PushUp(rt);}int main(){ int n, i, a, b, c, t, q, num=0; scanf("%d",&t); while(t--) { num++; scanf("%d",&n); build(1,n,1); scanf("%d",&q); while(q--) { 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",num,sum[1]); } return 0;}

转载地址:http://hbqcx.baihongyu.com/

你可能感兴趣的文章
Kafka集群搭建详细步骤
查看>>
Mac os 10.9 Python MySQLdb
查看>>
理解对象(通过关联数组和基本包装类型)
查看>>
linux查看系统版本(32位/64位)的方法
查看>>
linux基础--awk文本分析工具详解
查看>>
Highcharts中Legend动态显示点值
查看>>
结合bgp路由反射器和internet访问的mpls *** 实验
查看>>
MongoDB笔记五——插入操作
查看>>
我的友情链接
查看>>
bash脚本示例1
查看>>
企业应用系统驱动企业业务变革
查看>>
mysql(三)
查看>>
MySQL数据库主从同步(单台2实例)
查看>>
java中按字节获得字符串长度的两种方法 Java问题通用解决代码
查看>>
render: h => h(App) $mount 什么意思
查看>>
HashMap和HashTable简介和区别
查看>>
java json 库之 jackson
查看>>
【图像缩放】最邻近插值
查看>>
一个关于对象引用的bug引发的对于引用类型及数组的简单思考
查看>>
JavaScript 进阶知识 - 特效篇(一)
查看>>