hihocoder1078 线段树的区间修改
思路:
线段树区间更新。注意这里是把一个区间的所有数全部赋值为一个新的值。
实现:
#include <bits/stdc++.h>
using namespace std;
const int N = ;
int tree[N << ], lazy[N << ], a[N], n, q; void build(int num, int l, int r)
{
if (l == r) { tree[num] = a[l]; return; }
int m = l + r >> ;
build(num << , l, m);
build(num << | , m + , r);
tree[num] = tree[num << ] + tree[num << | ];
} void pushdown(int num, int cl, int cr)
{
if (!lazy[num]) return;
tree[num << ] = lazy[num] * cl;
tree[num << | ] = lazy[num] * cr;
lazy[num << ] = lazy[num];
lazy[num << | ] = lazy[num];
lazy[num] = ;
} void update(int num, int l, int r, int x, int y, int p)
{
if (x <= l && y >= r) { tree[num] = (r - l + ) * p; lazy[num] = p; return; }
int m = l + r >> ;
pushdown(num, m - l + , r - m);
if (x <= m) update(num << , l, m, x, y, p);
if (y >= m + ) update(num << | , m + , r, x, y, p);
tree[num] = tree[num << ] + tree[num << | ];
} int query(int num, int l, int r, int x, int y)
{
if (x <= l && y >= r) return tree[num];
int m = l + r >> ;
pushdown(num, m - l + , r - m);
int ans = ;
if (x <= m) ans += query(num << , l, m, x, y);
if (y >= m + ) ans += query(num << | , m + , r, x, y);
return ans;
} int main()
{
ios::sync_with_stdio(false);
cin >> n;
for (int i = ; i <= n; i++) cin >> a[i];
build(, , n);
cin >> q;
int x, y, t, p;
for (int i = ; i <= q; i++)
{
cin >> t;
if (t == )
{
cin >> x >> y;
cout << query(, , n, x, y) << endl;
}
else
{
cin >> x >> y >> p;
update(, , n, x, y, p);
}
}
return ;
}
hihocoder1078 线段树的区间修改的更多相关文章
- HihoCoder1078线段树的区间修改(线段树+lazy)
每个测试点(输入文件)有且仅有一组测试数据. 每组测试数据的第1行为一个整数N,意义如前文所述. 每组测试数据的第2行为N个整数,分别描述每种商品的重量,其中第i个整数表示标号为i的商品的重量Pi. ...
- 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将问题 ...
- 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 ...
随机推荐
- HTTP服务器用什么组件或者方式比较好
我目前用Indy的HttpServer组件来编写,但遇到一个暂时没有办法解决的问题,就是上传文件到这个HTTPServer,如果文件名包含中文,则会出现乱码.网上查了一下,这是个indy的遗留问题,据 ...
- 启动vmware中的虚拟机的时候,提示Failed to lock the file
http://www.vixual.net/blog/archives/842 VMware Server 當掉後重新啟動 Guest OS 時,出現 cannot open the disk '*. ...
- POJ-3352 Redundant Paths
In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1..F) t ...
- Viewpager animation duration setting
private void animatePagerTransition(final boolean forward) { ValueAnimator animator = ValueAnimator. ...
- ios 给移动的控件添加点击事件
前言: 给一个UIView做移动动画,虽然看起来frame在持续改变,但是它的frame已经是最终值了. 也就是说表面看到的动画都是假象,它的真实位置已经是固定的了.所以只有点击在他的真实frame范 ...
- Quartz2D绘图 及实例:下载进度
基础绘图: C语言coregraphics框架 绘制一条线:(不常用) UIBezierPath 路径画图 1.线段 线段2: 2.三角形 填充颜色 如果边框颜色和填充颜色都为红色:[[UICol ...
- ubuntu IP 扫描
/******************************************************************************* * ubuntu IP 扫描 * 说明 ...
- Superprime Rib
链接 分析:满足题目条件的必然是1,2,3,5,7,9这几个数字的组合,DFS按位进行即可,边组合边判断是否合法. /* PROB:sprime ID:wanghan LANG:C++ */ #inc ...
- Code-NFine:下来框和复选框
ylbtech-Code-NFine:下来框和复选框 1.返回顶部 1. 1.1 html $("#F_OrganizeId").bindSelect({ url: "/ ...
- win7下出现'telnet' 不是内部或外部命令,也不是可运行的程序或批处理文件的解决方法
在win7竟然不可能使用telnet命令,使用时会出现“'telnet' 不是内部或外部命令,也不是可运行的程序或批处理文件”,研究了很多,才终于明白WIN7默认是没有安装这个命令. 处理办法: 依次 ...