kb-07线段树-05-区间整体修改查询;(水)
/* */
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
struct P
{
int l,r,value;
int add;
}tr[];
void Pushup(int rt)
{
tr[rt].value=tr[rt<<].value+tr[rt<<|].value;
}
void build(int rt,int l,int r)
{
tr[rt].l=l;
tr[rt].r=r;
tr[rt].add=;
if(l==r)
{
tr[rt].value=;
return ;
}
int mid=(l+r)/;
build(rt<<,l,mid);
build(rt<<|,mid+,r);
Pushup(rt);
}
/*
区间修改,整体改成一个数,所以只需要记录这个数就可以了,区间的和可以用这个数乘以区间长度来求;
*/
void Pushdown(int rt)
{
if(tr[rt].add<=)
return ;
tr[rt<<].value=tr[rt].add*(tr[rt<<].r-tr[rt<<].l+);
tr[rt<<|].value=tr[rt].add*(tr[rt<<|].r-tr[rt<<|].l+);
tr[rt<<].add=tr[rt].add;
tr[rt<<|].add=tr[rt].add;
tr[rt].add=;
}
void Update(int rt,int l,int r,int begin,int end,int x)
{
if(begin<=l&&end>=r)
{
tr[rt].add=x;
tr[rt].value=x*(r-l+);//把区间更新成x
return ;
}
Pushdown(rt);
if(begin <=tr[rt<<].r)
{
Update(rt<<,l,tr[rt<<].r,begin,end,x);
}
if(end >=tr[rt<<|].l)
{
Update(rt<<|,tr[rt<<|].l,r,begin,end,x);
}
Pushup(rt);//区间下面的值发生变化,所以要pushup }
int main()
{
int T,k=;
scanf("%d",&T);
while(T--)
{
int n,q;
scanf("%d%d",&n,&q);
memset(tr,,sizeof(tr));
build(,,n);
for(int i=;i<q;i++)
{
int ll,rr,v;
scanf("%d%d%d",&ll,&rr,&v);
Update(,,n,ll,rr,v);
// for(int j=1;j<=25;j++)
// printf("%d:%d\n",j,tr[j].value);
}
int ans=tr[].value;
printf("Case %d: The total value of the hook is %d.\n",k++,ans);
}
return ;
}
kb-07线段树-05-区间整体修改查询;(水)的更多相关文章
- hdu1754 I hate it线段树模板 区间最值查询
题目链接:这道题是线段树,树状数组最基础的问题 两种分类方式:按照更新对象和查询对象 单点更新,区间查询; 区间更新,单点查询; 按照整体维护的对象: 维护前缀和; 维护区间最值. 线段树模板代码 # ...
- 【线段树求区间第一个不大于val的值】Lpl and Energy-saving Lamps
https://nanti.jisuanke.com/t/30996 线段树维护区间最小值,查询的时候优先向左走,如果左边已经找到了,就不用再往右了. 一个房间装满则把权值标记为INF,模拟一遍,注意 ...
- hiho一下20周 线段树的区间修改
线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题改了改,又出给了 ...
- poj 3468:A Simple Problem with Integers(线段树,区间修改求和)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 58269 ...
- hihoCode 1078 : 线段树的区间修改
#1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...
- hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)
#1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...
- 培训补坑(day7:线段树的区间修改与运用)(day6是测试,测试题解以后补坑QAQ)
补坑咯~ 今天围绕的是一个神奇的数据结构:线段树.(感觉叫做区间树也挺科学的.) 线段树,顾名思义就是用来查找一段区间内的最大值,最小值,区间和等等元素. 那么这个线段树有什么优势呢? 比如我们要多次 ...
- 【bzoj3110】[Zjoi2013]K大数查询 权值线段树套区间线段树
题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...
- hdu 1698:Just a Hook(线段树,区间更新)
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
随机推荐
- [论文理解] CornerNet: Detecting Objects as Paired Keypoints
[论文理解] CornerNet: Detecting Objects as Paired Keypoints 简介 首先这是一篇anchor free的文章,看了之后觉得方法挺好的,预测左上角和右下 ...
- webpack-dev-server配置指南webpack3.0
最近正在研究webpack,听说webpack可以自己搭建一个小型的服务器(使用过vue-cli的朋友应该都见识到过),所以迫不及待的想要尝试一下.不过,在实际操作中发现,用webpack搭建服务器仍 ...
- 用python写trojan的过程中遇到的各种问题
由于之前已经conn, addr = s.accept() 所以改为 conn.recv spyder无法同时运行client 和 server 分别在spyder和anaconda prompt运 ...
- 将远程分支拷贝到本地,并更新代码push到原分支
第一步:git clone +主分支 第二步:git fetch origin 分支名 第三步:git checkout -b 分支名 origin/分支名 第四步:git pull origin 分 ...
- 控制nginx并发链接数量和客户端请求nginx的速率
一.控制nginx并发链接数 ngx_http_limit_conn_module这个模块用于限制每个定义的key值的链接数,特别是单IP的链接数. 不是所有的链接数都会被计数,一个符合计数要求的连接 ...
- 使用jmeter做简单的压测(检查点、负载设置、聚合报告)
1.添加断言(检查点) 在需要压测的接口下添加--断言--响应断言,取接口响应中包含有的数据即可 检查点HTTP请求-->断言-->响应断言1.名称.注释2.Apply to//作用于哪里 ...
- destoon 支付异步接口文件 notify.php 调试方式
在if($verify_result) { 之前复制这三个变量 就可以直接访问notify.php 启用调试模式 或者 逐步echo 相关变量来调试 错误原因 notify.php没有入口文件 是 ...
- GOPATH和GOROOT
安装指定版本golang apt-get purge golang* //删除之前安装的文件 add-apt-repository ppa:evarlast/golang-1.8 apt-get up ...
- python之自定义排序函数sorted()
sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面, ...
- ubuntu gcc的下载链接,比较快的。
http://mirrors.163.com/ubuntu-releases/ http://xhmikosr.1f0.de/tools/msys/