hihoCoder week20 线段树的区间修改
区间修改 区间查询
最后一场比赛前的无可救药的热身
#include <bits/stdc++.h>
using namespace std;
#define mid ((l+r)/2)
#define ls (rt<<1)
#define rs (rt<<1|1)
const int N = 2e5+; int n, s[N], tr[N], lz[N]; void build(int rt,int l,int r)
{
if(l ==r) {
tr[rt] = s[l];
return ;
}
build(ls,l,mid);
build(rs,mid+,r);
tr[rt] = tr[ls] + tr[rs];
} void down(int rt,int l,int r)
{
if(lz[rt]) {
lz[ls] = lz[rs] = lz[rt];
tr[ls] = (mid-l+) * lz[ls];
tr[rs] = (r - mid) * lz[rs];
lz[rt] = ;
}
} void update(int rt,int l,int r,int L,int R,int val)
{
if(L <= l && r <= R) {
lz[rt] = val;
tr[rt] = val * (r-l+);
return ;
}
down(rt,l,r);
if(L<=mid)
update(ls,l,mid,L,R,val);
if(R>mid)
update(rs,mid+,r,L,R,val);
tr[rt] = tr[ls] + tr[rs];
} long long query(int rt,int l,int r,int L,int R)
{
if(L <= l && r <= R) {
return tr[rt];
}
down(rt,l,r);
long long res = ;
if(L<=mid)
res = res + query(ls,l,mid,L,R);
if(R>mid)
res = res + query(rs,mid+,r,L,R);
return res;
}
void out(int rt,int l,int r)
{
printf("%d %d %d\n", l, r, tr[rt]);
if(l == r)
return ;
out(ls,l,mid);
out(rs,mid+,r);
}
int main()
{
freopen("in.txt", "r", stdin);
scanf("%d", &n);
for(int i=; i<=n; i++)
scanf("%d", &s[i]);
build(,,n);
int m; scanf("%d", &m);
while(m--) {
int op,l,r;
scanf("%d %d %d", &op, &l, &r);
if(op) {
int val; scanf("%d", &val);
update(,,n,l,r,val);
// out(1,1,n);
//puts("-----");
}else
printf("%lld\n", query(,,n,l,r));
}
return ;
}
hihoCoder week20 线段树的区间修改的更多相关文章
- hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)
#1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...
- hihoCoder #1078 : 线段树的区间修改
题目大意及分析: 线段树成段更新裸题. 代码如下: # include<iostream> # include<cstdio> # include<cstring> ...
- hihoCode 1078 : 线段树的区间修改
#1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...
- 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 ...
- hiho一下21周 线段树的区间修改 离散化
离散化 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho ...
- UVa 11992 Fast Matrix Operations (线段树,区间修改)
题意:给出一个row*col的全0矩阵,有三种操作 1 x1 y1 x2 y2 v:将x1 <= row <= x2, y1 <= col <= y2里面的点全部增加v: 2 ...
- 培训补坑(day7:线段树的区间修改与运用)(day6是测试,测试题解以后补坑QAQ)
补坑咯~ 今天围绕的是一个神奇的数据结构:线段树.(感觉叫做区间树也挺科学的.) 线段树,顾名思义就是用来查找一段区间内的最大值,最小值,区间和等等元素. 那么这个线段树有什么优势呢? 比如我们要多次 ...
- HDU 1698 【线段树,区间修改 + 维护区间和】
题目链接 HDU 1698 Problem Description: In the game of DotA, Pudge’s meat hook is actually the most horri ...
随机推荐
- POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解
http://blog.csdn.net/l081307114/article/details/46009015 http://www.cnblogs.com/dreammyle/p/5458280. ...
- spring 的核心类JdbcTemplate 方法
2018-11-29 10:28:02
- 20165305 苏振龙《Java程序设计》第四周课上测试补做
第一次测试 第二次测试 第三次测试 上传代码 第四次测试 总结 之前我一直在git bash进行程序设计,但是对于我来说操作起来有点困难,所以我改用了虚拟机,之后之前一直困扰我的问题在虚拟机下就没有了 ...
- c# 设置控件的前景颜色和背景颜色
AutoSize:设置为false取消自动计算尺寸功能,控件的大小则按照设定的Size来呈现,设置为true自动计算大小 TextAlign:设置对齐方式 // // 摘要: // 用默认的所有者运行 ...
- SpringMVC常用注解的规则(用法)
SpringMVC注解 @RequestMapping用法: a. 用在controller方法上: 标记url到请求方法的映射, 其实就是通过一段url地址, 找到对应需要执行的 ...
- C# 设置按钮快捷键
参考自:http://www.csharpwin.com/csharpspace/3932r8132.shtml 一.C# button快捷键之第一种:Alt + *(按钮快捷键) 在Button按钮 ...
- spring boot 概念
最近新版本迭代,一直在弄框架替换和新技术实现的事儿. 本来想仔细介绍一下Spring Boot的各种东西,后来发现没啥写的,Spring Boot 说白了就是把你开发过程中用到的各种框架给你封装了一下 ...
- SRTP参数及数据包处理过程(转)
源: SRTP参数及数据包处理过程
- PXC备份方式总结
记录一下. 1.mysqldump数据导出 关于GTID: GTID是MySQL5.6以后,加入了全局事务 ID (GTID) 来强化数据库的主备一致性,故障恢复,以及容错能力. A global t ...
- K8S学习笔记之Flannel解读
0x00 概述 我们知道docker官方并没有提供多主机的容器通信方案,单机网络的模式主要有host,container,brige,none.none这种模式,顾名思义就是docker本身不去管理网 ...