区间修改 区间查询

最后一场比赛前的无可救药的热身

#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 线段树的区间修改的更多相关文章

  1. hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)

    #1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...

  2. hihoCoder #1078 : 线段树的区间修改

    题目大意及分析: 线段树成段更新裸题. 代码如下: # include<iostream> # include<cstdio> # include<cstring> ...

  3. hihoCode 1078 : 线段树的区间修改

    #1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...

  4. hiho一下20周 线段树的区间修改

    线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题改了改,又出给了 ...

  5. poj 3468:A Simple Problem with Integers(线段树,区间修改求和)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 58269   ...

  6. hiho一下21周 线段树的区间修改 离散化

    离散化 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho ...

  7. UVa 11992 Fast Matrix Operations (线段树,区间修改)

    题意:给出一个row*col的全0矩阵,有三种操作 1 x1 y1 x2 y2 v:将x1 <= row <= x2, y1 <= col <= y2里面的点全部增加v: 2 ...

  8. 培训补坑(day7:线段树的区间修改与运用)(day6是测试,测试题解以后补坑QAQ)

    补坑咯~ 今天围绕的是一个神奇的数据结构:线段树.(感觉叫做区间树也挺科学的.) 线段树,顾名思义就是用来查找一段区间内的最大值,最小值,区间和等等元素. 那么这个线段树有什么优势呢? 比如我们要多次 ...

  9. HDU 1698 【线段树,区间修改 + 维护区间和】

    题目链接 HDU 1698 Problem Description: In the game of DotA, Pudge’s meat hook is actually the most horri ...

随机推荐

  1. <9>cc.Sprite组件

    1.精灵 精灵(Sprite)是Cocos系列的核心概念之一,是Cocos Creator最常用的显示图像的组件. 游戏中显示一个图片,我们就可以把这个叫做”精灵” sprite,这只是简单理解概念. ...

  2. 《大话设计模式》c++实现 装饰者模式

    一.UML图   介绍 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创 ...

  3. 准备MyBatis

    MyBatis下载:https://github.com/mybatis/mybatis-3/releases MyBatis文件目录: 中文参考文档:http://www.mybatis.org/m ...

  4. 【Hadoop学习之八】MapReduce开发

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 伪分布式:HDFS和YARN 伪分 ...

  5. FileInputstream,FileOutputstream 和 byteArrayInputStream,byteArrayOutputStream

    你知道FileInputstream和FileOutputstream吗?FileInputstream,FileOutputstream分别是由抽象类Inputstream和Outputstream ...

  6. 32个使用python代码片段

    1.冒泡排序 lis = [56,12,1,8,354,10,100,34,56,7,23,456,234,-58] def sortport():    for i in range(len(lis ...

  7. STM32 一个定时器产生4路 独立调频率,占中比可调,脉冲个数可以统计。

    实现这个功能,基本原理是利用STM32 的输出比较功能. 1.其它设置就是普通定时器的设置这里开启,四个输出比较中断,和一个更新中断, 更新中断这里不需要开也可以达到目的,我这里开启是做其它的用处的. ...

  8. 2017-2018-2 java红茶第二周作业

    详见团队博客:http://www.cnblogs.com/javahc/p/9033816.html

  9. 微信小程序制作家庭记账本之七

    最后一天,程序完成的仍然不是很好,作品很简陋,不过还是可以记账的,没有购买域名,别人无法使用,下次我会完成的更好.

  10. python 关键字yield解析

    python 关键字yield解析 yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator.y ...