洛谷3372 线段树1
来源:互联网 发布:非交互式的域名备案 编辑:程序博客网 时间:2024/05/24 03:43
//注意求和要*区间个数#include<bits/stdc++.h>using namespace std;const int maxn = 100010;int n, m;long long a[maxn];struct node{ long long val, mark;} segtree[4*maxn];inline void make_tree(int root, int l, int r){ segtree[root].mark = 0; if(l == r){ segtree[root].val = a[l]; return; } int mid = l+r >> 1; make_tree(root*2, l, mid); make_tree(root*2+1, mid+1, r); segtree[root].val = segtree[root*2].val + segtree[root*2+1].val;}inline void pushdown(int root, int l, int r){ if(segtree[root].mark){ int mid = l+r >> 1; segtree[2*root].mark += segtree[root].mark; segtree[2*root+1].mark += segtree[root].mark; segtree[2*root].val += segtree[root].mark * (mid-l+1); segtree[2*root+1].val += segtree[root].mark * (r-mid); segtree[root].mark = 0; }}inline void update(int root, int nl, int nr, int l, int r, int k){ if(nl > r || nr < l) return; if(nl >= l && nr <= r){ segtree[root].mark += k; segtree[root].val += (nr-nl+1) * k; return; } pushdown(root, nl, nr); int mid = nl+nr >> 1; update(root*2, nl, mid, l, r, k); update(root*2+1, mid+1, nr, l, r, k); segtree[root].val = segtree[2*root].val + segtree[2*root+1].val;}inline long long get_sum(int root, int nl, int nr, int l, int r){ long long ans = 0; //if(nl > r || nr < l) return 0; //if(nl == nr) return segtree[root].val; if(nl >= l && nr <= r) return segtree[root].val; pushdown(root, nl, nr); int mid = nl+nr >> 1; if(mid < r) ans += get_sum(root*2+1, mid+1, nr, l, r); if(mid >= l) ans += get_sum(root*2, nl, mid, l, r); return ans;}int main(){ scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++) scanf("%d", &a[i]); make_tree(1, 1, n); for(int i = 1, op, x, y, k; i <= m; i++){ scanf("%d", &op); if(op == 1){ scanf("%d%d%d", &x, &y, &k); update(1, 1, n, x, y, k); } else if(op == 2){ scanf("%d%d", &x, &y); long long sum = get_sum(1, 1, n, x, y); //printf("%lld\n", segtree[1].val); printf("%lld\n", sum); } } return 0;}
阅读全文
0 0
- 洛谷3372 线段树1
- 洛谷 3372_【模板】线段树 1_线段树
- 【模板】线段树 洛谷 3372 线段树
- 洛谷3372[模板]线段树1
- 【洛谷】P3372线段树1 线段树模板
- [线段树练习1] 线段统计 - 线段树懒标记
- 【洛谷P3372】【模板】线段树 1
- 洛谷P3374模板线段树1
- 洛谷 P3372【模板】线段树 1
- 洛谷P3372 【模板】线段树 1
- 洛谷 P3372 【模板】线段树 1
- 【洛谷P3372】【模板】线段树1
- 洛谷 1609 线段树
- 线段树1
- 线段树(1)
- 线段树(1)
- 1线段树资料
- 线段树1练习
- Unity_飘伤害_053
- H5调用摄像头、相册、拨打电话、信息
- SEO与SEM的好处和区别
- 正则匹配
- QT5.6 开发笔记
- 洛谷3372 线段树1
- Qt学习笔记之QTextEdit 、QPlainTextEdit
- unity用wasd控制前后左右,qe控制上下,鼠标控制视角转动
- 动态规划基础篇之子段和问题
- java递归-mysql篇
- 文章标题
- React Native移动开发实战-2-如何调试React Native项目
- 记录将oracle 的*.dmp转存到sql server过程
- 欢迎使用CSDN-markdown编辑器