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 ...
随机推荐
- [2]传奇3服务器源码分析一 LoginServer
留存 服务端下载地址: 点击这里
- [转]js刷新父窗体
浮层内嵌iframe及frame集合窗口,刷新父页面的多种方法 <script language=JavaScript> parent.location.reload(); ...
- html5-button元素
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- html5-超级链接
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- Latex数学公式中的空格
http://blog.sina.com.cn/s/blog_4ddef8f80100iwwv.html 两个quad空格 a \qquad b 两个m的宽度 quad空格 a \quad b 一个m ...
- kalinux 五笔安装
1.输入命令 sudo apt-get install fcitx-table-wubi 2.配置,找到这个fcitx配置,运行,把五笔调到第2个 3.reboot重启系统
- JVM探秘3---垃圾回收机制详解
众所周知,Java有自己的垃圾回收机制,它可以有效的释放系统资源,提高系统的运行效率.那么它是怎么运行的呢,这次就来详细解析下Java的垃圾回收 1.什么是垃圾? 垃圾回收回收的自然是垃圾,那么jav ...
- Linux基础命令---修改用户密码
passwd 更改用户密码,超级用户可以修改所有用户密码,普通用户只能修改自己的密码.这个任务是通过调用LinuxPAM和LibuserAPI来完成的.本质上,它使用LinuxPAM将自己初始化为一个 ...
- Python词云分析
import jieba from matplotlib import pyplot as plt from wordcloud import WordCloud from PIL import Im ...
- Django后端项目---- Rest Framework(2)
一.认证(补充的一个点) 认证请求头 #!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import API ...