区间修改区间查询 lazy标记
来源:互联网 发布:外卖兼职软件 编辑:程序博客网 时间:2024/06/05 20:22
//区间修改,区间查询#define _CRT_SECURE_NO_WARNINGS#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<string.h>#define ll long longusing namespace std;const int maxn = 100005;struct node {ll sum;int lazy;}T[maxn<<2];void push_up(int root){T[root].sum = T[root << 1].sum + T[(root << 1) | 1].sum;}void push_down(int L, int R, int root){int mid = (L + R) >> 1;T[root << 1].sum = T[root].lazy*(mid - L + 1);T[root << 1 | 1].sum = T[root].lazy*(R - mid);T[root << 1].lazy = T[root << 1 | 1].lazy = T[root].lazy;T[root].lazy = 0;}void build(int l, int r, int root){if (l == r) {scanf("%d", &T[root].sum);return;}int mid=(l + r)>>1;build(l, mid, root<<1);build(mid + 1, r, root << 1 | 1);push_up(root); //不能遗漏这一步}void update(int l, int r,int value, int L, int R, int root){if (l <= L&&r >= R) {T[root].lazy = value;T[root].sum = value*(R - L + 1);return;}int mid = (L + R) >> 1;if (T[root].lazy)push_down(L, R, root);if (r <= mid)update(l, r, value,L, mid, root << 1);else if (l > mid)update(l, r, value, mid + 1, R, root << 1 | 1);else {update(l, r, value, L, mid, root << 1);update(l, r, value, mid + 1, R, root << 1 | 1);}push_up(root);}int query(int l, int r, int L, int R, int root){if (l <= L&&r >= R)return T[root].sum;int mid = (L + R) >> 1;if (T[root].lazy)push_down(L, R, root);if (r <= mid)return query(l, r, L, mid, root<<1);else if (l > mid)return query(l, r, mid + 1, R, root<<1 | 1);return query(l, mid, L, mid, root << 1) + query(mid + 1, r, mid + 1, R, root << 1 | 1);}int main(){int n, q;scanf("%d", &n);build(1, n, 1);scanf("%d", &q);int a, b, c, d;while (q--){scanf("%d%d%d", &a, &b, &c);if (a){scanf("%d", &d);update(b, c, d, 1, n, 1);}else printf("%d\n", query(b, c, 1, n, 1));}return 0;}
阅读全文
0 0
- 区间修改区间查询 lazy标记
- 线段树区间修改 lazy标记 大法
- SKYLINE uva+线段树+区间的修改+lazy标记
- 线段树 (区间修改 区间查询 延迟标记)
- 区间修改,区间查询
- 线段树学习笔记(单点更新+区间查询最大值+lazy标记+pushdown操作+区间更新+求区间和)
- 线段树区间修改之双标记 【lazy两重标记并且分类讨论】
- 区间修改lazy线段树
- 线段树模板(区间和+区间最大值 + LAZY标记)
- 线段树2(区间修改,lazy)
- 线段树求区间最大值+区间更新+区间求和+lazy标记
- 树状数组(单点修改区间查询、区间修改单点查询、区间修改区间查询)
- 树状数组-单点修改区间查询-区间修改单点查询-区间修改区间查询
- 树状数组~poj3468~区间修改 区间查询
- 树状数组 --区间查询+区间修改
- 【codevs1082】【树状数组】 区间修改 区间查询
- 笔记 树状数组--区间查询+区间修改
- 树状数组实现 区间修改+区间查询
- 一只萌新的编程前准备
- Bash
- 文章标题
- 微信跨服务器授权(windows-linux)
- DVWA之low级别SQL Injection
- 区间修改区间查询 lazy标记
- Subway(最短路)
- 创建型模式之建造者模式(生成器模式)
- XML解析之Android内置Pull解析器
- keil找不到芯片型号的解决方法
- iOS block和代理的区别
- 最全Pycharm教程(29)——再探IDE,速成手册
- java多态的一些问题
- 如何学习嵌入式? 嵌入式之路从入门到放弃....