记录一下zkw线段树
来源:互联网 发布:淘宝刷到单流程图 编辑:程序博客网 时间:2024/06/05 09:08
今天重新学习了一下ZKW线段树,非递归版的线段树。学完之后就是突出一个美丽新世界。
在这里用敌兵布阵测试,并记录一下方便以后复习。
#include<bits/stdc++.h>using namespace std;const int maxn = 50005;int n, N;int arr[maxn];int Sum[maxn<<2];void build(int n){ memset(Sum, 0, sizeof(Sum)); N = 1; while(N < n+2) N <<= 1; for (int i = 1; i <= n; i++) Sum[N+i] += arr[i]; for (int i = N-1; i > 0; i--) Sum[i] = Sum[i<<1] + Sum[i<<1|1];}void update(int L, int C){ for (int i = L+N; i > 0; i >>= 1) Sum[i] += C;}int query(int L, int R){ int ans = 0; int s, t; for (s = L+N-1, t = R+N+1; s^t^1; s >>= 1, t >>= 1){ if (~s&1) ans += Sum[s^1]; if (t&1) ans += Sum[t^1]; } return ans;}int main(){ std::ios::sync_with_stdio(false); int T; cin >> T; for (int kase = 1; kase <= T; kase++){ cin >> n; for (int i = 1; i <= n; i++) cin >> arr[i]; build(n); cout << "Case " << kase << ":" << endl; string opt; while(cin >> opt){ if (opt[0] == 'E') break; int s, t; cin >> s >> t; if (opt[0] == 'A') update(s, t); if (opt[0] == 'S') update(s, -t); if (opt[0] == 'Q') cout << query(s, t) << endl; } } return 0;}
阅读全文
0 0
- 记录一下zkw线段树
- zkw线段树 运用
- 【zkw线段树】ural1855
- ZKW线段树
- POJ3468 ZKW线段树
- ZKW线段树
- zkw线段树 模板
- ZKW线段树
- zkw线段树
- zkw线段树
- zkw线段树分析
- ZKW 线段树
- zkw线段树
- zkw线段树详解
- zkw线段树
- poj3468 zkw线段树
- zkw线段树
- zkw线段树
- muduo网络库源码解析 一
- 2017暑假实习
- 欢迎使用CSDN-markdown编辑器
- 用caffe训练自己的数据集时出错:type “caffe.ImageDataParameter” has no field named “backend”
- C++实现CString和string的互相转换
- 记录一下zkw线段树
- mysql生成1千万条有效测试数据
- F1V3.0-图形-前端如何快速搭建一个地图相关的应用
- Java动态代理机制详解(JDK 和CGLIB)
- HBase Flush 解析
- ORACLE NOTE
- 纯CSS实现三角形
- 2017西安交大ACM小学期数据结构 [树状数组,极大值]
- 多线程NSThread、NSOperation、GCD