zkw线段树模板及理解
来源:互联网 发布:jdbc连接数据库5个步骤 编辑:程序博客网 时间:2024/05/29 15:18
zkw线段树模板及理解
线段树作为很重要的一个知识点一直却没有学会,今天突然接触到了一种新的线段树写法,相比原来的较简单,叫zkw线段树。
这个线段树并不需要递归的来写,并且在单点查询上有很好的效果。
zkw需要建立一个满二叉树来实现。
首先是一个区间求和的建树的操作:
void build(int x){ for(M=1;M<=n+1;M<<1); for(int i=M+1;i<=n+M;i++) scanf("%d",&T[i]); for(int i=M-1;i;i--) T[i]=T[i<<1]+T[i<<1|1];}接下来是单点的更新操作:
void updata(int x,int val){ T[x+=M]+=val; for(x>>=1;x>=1;x>>=1) { T[x]=T[x<<1]+T[x<<1|1]; }}最后是区间查询的操作:
ll query(int l,int r){ l=l+M-1,r=r+M+1; ll ans=0; for(;l^r^1;l>>=1,r>>=1) { if(~l&1)ans+=T[l^1]; if(r&1) ans+=T[r^1]; } return ans;}下面是zkw线段树的一道例题应用,也是大家熟知的HDU 1166 敌兵布阵 。
#include <cstdio>#include <iostream>#include<cstring>typedef long long ll;using namespace std;#define maxn 200001ll T[maxn*4];int M,n;void build(){ for(M=1;M<=n+1;M<<=1); for(int i=M+1;i<=n+M;i++) scanf("%d",&T[i]); for(int i=M-1;i;i--) T[i]=T[i<<1]+T[i<<1|1];}void updata(int x,int val){ T[x+=M]+=val; for(x>>=1;x>=1;x>>=1) { T[x]=T[x<<1]+T[x<<1|1]; }}ll query(int l,int r){ l=l+M-1,r=r+M+1; ll ans=0; for(;l^r^1;l>>=1,r>>=1) { if(~l&1)ans+=T[l^1]; if(r&1) ans+=T[r^1]; } return ans;}int main(){ int cas=0; int t; cin>>t; string s; for(int cas=1;cas<=t;cas++) { memset(T,0,sizeof(T)); printf("Case %d:\n",cas); cin>>n; build(); while(cin>>s) { if(s[0]=='E') break; int a,b; scanf("%d%d",&a,&b); if(s[0]=='A') updata(a,b); else if(s[0]=='S') updata(a,-b); else printf("%lld\n",query(a,b)); } }}
阅读全文
0 0
- zkw线段树模板及理解
- zkw线段树 模板
- {模板}ZKW线段树
- 非递归ZKW线段树完全模板
- zkw线段树的理解和思考
- HDOJ 5217 Brackets(zkw线段树模板+单点更新)
- zkw线段树 运用
- 【zkw线段树】ural1855
- ZKW线段树
- POJ3468 ZKW线段树
- ZKW线段树
- ZKW线段树
- zkw线段树
- zkw线段树
- zkw线段树分析
- ZKW 线段树
- zkw线段树
- zkw线段树详解
- 动态规划系列---求数组中两个元素差的最大值
- ZigBee规范各层原语及其功能概述
- hadoop(ha)+hbase
- LeetCode 94: Binary Tree Inorder Traversal 解题与思考
- 2017-10-11 ACM感言
- zkw线段树模板及理解
- python学习笔记1:%r和%s的区别
- HDU 1598 find the most comfortable road
- [网络流24题] 最长递增子序列问题 最大流/
- 當複古與潮流結合,一起燥起牛仔風吧!(台灣愛迪達)
- LeetCode——136. Single Number&&137. Single Number II
- Java爬虫历险记 -- (1)爬取百度首页的logo
- C和C++运行库
- WEB-INF下的资源可以通过forward转发进行访问