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 ...
随机推荐
- 页面每隔n分钟轮换一个微信名和微信名
1.前端index.html <head> <meta charset="UTF-8"> <title>n号循环</title> & ...
- django 网站的搭建(2)
这里使用nginx+uwsgi的方法来搭建生产环境 1,pip3.5 install uwsgi 下载uwsgi ,这里就不做测试了,一般不会出错 2,将django与uwsgi连接在一起 毕竟ru ...
- sitecore系列教程之Sitecore个性化-试点开始,测试,优化,增量
这是利用Sitecore的个性化引擎实现数字化转型的三部分系列的第三部分.之前的帖子旨在通过为您的个性化体验定义内容策略并在Sitecore中配置该策略来设置基础. 在此之前,我们讨论了内容策略以 ...
- RootConfig类
package com.ssm.yjblogs.config; import java.util.Properties; import javax.sql.DataSource; import org ...
- 【Hbase学习之三】Hbase Java API
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-2.6.5 hbase-0.98.12.1-h ...
- 【Hadoop学习之十二】MapReduce案例分析四-TF-IDF
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 概念TF-IDF(term fre ...
- django 常用方法总结 < 手写分页-上传头像-redis缓存,排行 ...>
1.不使用自带模块<Paginator>的手写分页功能views.pydef post_list(request): page = request.GET.get('page', 1) # ...
- Git从远程仓库里拉取一条本地不存在的分支方法
Git从远程仓库里拉取一条本地不存在的分支方法 从远程仓库里拉取一条本地不存在的分支时,进入到对应目录先执行git fetch然后再执行git checkout -b 本地分支名 origin/远程分 ...
- AEC、AGC、ANS在视音频会议中的作用?
AGC是自动增益补偿功能(Automatic Gain Control),AGC可以自动调麦克风的收音量,使与会者收到一定的音量水平,不会因发言者与麦克风的距离改变时,声音有忽大忽小声的缺点.ANS是 ...
- Python进阶【第九篇】装饰器
什么是装饰器 装饰器本身就是函数,并且为其他函数添加附加功能 装饰器的原则:1.不修改被装饰对象的源代码 2.不修改被装饰对象的调用方式装饰器=高阶函数+函数嵌套+闭包 # res=timmer(t ...