HihoCoder 1078 线段树区间更新
来源:互联网 发布:淘宝答题抢红包 编辑:程序博客网 时间:2024/05/22 06:43
传送门:HihoCoder 1078
题解
就是一个lazy标记
code:
/*adrui's submissionLanguage : C++Result : AcceptedLove : llFavorite : Dragon BallsStanding in the Hall of Fame*/#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;#define debug 0#define mid ((l + r) >> 1)#define ls rt << 1, l, mid#define rs rt << 1|1, mid + 1, r#define LL long long#define MOD 12357#define M(a, b) memset(a, b, sizeof(a))const int maxn(1e5 + 7);int n;struct { int v; int lazy;}node[maxn << 2];void pushUp(int rt) { node[rt].v = node[rt << 1].v + node[rt << 1 | 1].v;}void pushDown(int rt, int m) { if (node[rt].lazy != 0) { //node[rt].v = m * node[rt].lazy; node[rt << 1].v = node[rt].lazy * (m - (m >> 1)); node[rt << 1|1].v = node[rt].lazy * (m >> 1); node[rt << 1].lazy = node[rt << 1 | 1].lazy = node[rt].lazy; node[rt].lazy = 0;; }}void build(int rt, int l, int r) { if (l == r) { scanf("%d", &node[rt].v); return; } build(ls); build(rs); pushUp(rt);}void update(int rt, int l, int r, int ul, int ur, int cal) { if (ul <= l && ur >= r) { node[rt].lazy = cal; node[rt].v = (r - l + 1) * cal; return; } pushDown(rt, r - l + 1); if (ul <= mid) { update(ls, ul, ur, cal); } if (ur > mid) { update(rs, ul, ur, cal); } pushUp(rt);}int query(int rt, int l, int r, int ql, int qr) { if (ql <= l && qr >= r) { return node[rt].v; } pushDown(rt, r - l + 1); int res = 0; if (ql <= mid) res += query(ls, ql, qr); if (qr > mid) res += query(rs, ql, qr); return res;}int main() {#if debug freopen("in.txt", "r", stdin);#endif //debug int q, k, a, b, c; M(node, 0); scanf("%d", &n); build(1, 1, n); scanf("%d", &q); while (q--) { scanf("%d", &k); if (k) { scanf("%d%d%d", &a, &b, &c); update(1, 1, n, a, b, c); } else { scanf("%d%d", &a, &b); printf("%d\n", query(1, 1, n, a, b)); } } return 0;}
0 0
- HihoCoder 1078 线段树区间更新
- hihocoder 1078 线段树的区间修改 (线段树 区间更新 模板)
- hihoCoder 1078 线段树的区间修改
- hihoCoder 1078 : 线段树的区间修改
- hihocoder#1078 线段树的区间修改
- hihoCoder 1078 线段树的区间修改
- hihocoder 1078 : 线段树的区间修改
- hihocoder #1078 : 线段树的区间修改
- hihocoder 1078 线段树的区间修改
- hihoCoder 1078 : 线段树的区间修改
- [HihoCoder]#1078 : 线段树的区间修改
- hihoCoder 1078 区间查询线段树
- hihocoder 1078 : 线段树的区间修改
- HihoCoder 1078(线段树,区间覆盖 询问区间和)
- hihocoder 1078# 线段树的区间修改模版
- hihocoder 1078 线段树的区间修改 java实现
- 线段树区间更新
- 线段树区间更新
- 几种阻塞队列介绍
- go语言环境搭建及vim高亮设置
- PAT 1034. Head of a Gang
- MySQL重置密码
- WM_INITPOPUPMENU消息
- HihoCoder 1078 线段树区间更新
- codeforces 166 B. Polygons
- javaweb文件上传,下载,下载列表展示
- 建站这件小事(五)【wordpress建站】
- VC++60 第十六章 VC++开发工具和MFC基础类库(二)
- 获得菜单的信息
- 课后自主实践-Switch语句初体验
- 设置菜单信息
- VC++60 第十六章 VC++开发工具和MFC基础类库(三)