【数据结构】【线段树】单点修改区间查询
来源:互联网 发布:淘宝注册地址怎么修改 编辑:程序博客网 时间:2024/05/16 16:58
#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>using namespace std;const int MAXSIZE = 50005;int T,n,x,y,a[MAXSIZE],sum[MAXSIZE*4];char ask[10];inline void update(int root)//上传节点信息 {sum[root]=sum[root<<1]+sum[root<<1|1];}void build(int now_root, int l, int r)//建立线段树 {if (l==r){sum[now_root]=a[l];return;}int mid=(l+r)>>1;build(now_root<<1,l,mid);build(now_root<<1|1,mid+1,r);update(now_root);}void modify(int i, int l, int r, int x, int d)//修改:在x处加d {if (l==r){sum[i]+=d;return;}int mid=(l+r)>>1;if (x<=mid) modify(i<<1,l,mid,x,d);else modify(i<<1|1,mid+1,r,x,d);update(i);}int query(int i, int l, int r, int L, int R)//询问L到R区间和 {if (L<=l&&r<=R)return sum[i];int mid=(l+r)>>1;int ans=0;if (L<=mid) ans+=query(i<<1,l,mid,L,R);if (mid<R) ans+=query(i<<1|1,mid+1,r,L,R);return ans;}int main(){scanf("%d",&n);for(int i=1; i<=n; i++)scanf("%d",&a[i]);build(1,1,n);//建立线段树 scanf("%s",ask+1);//读入操作命令:Add,Query,End while(ask[1]!='E'){scanf("%d%d",&x,&y);if (ask[1]=='A')modify(1,1,n,x,y);//在x处加y if (ask[1]=='Q')printf("%d\n",query(1,1,n,x,y));//询问x到y区间和 scanf("%s",ask+1);}return 0;}
这是HDU1166修改后的模板,用线段树维护区间和,支持单点修改和区间查询操作
0 0
- 【数据结构】【线段树】单点修改区间查询
- 线段树(单点修改,区间查询)
- 线段树(区间修改,单点查询)
- HDU1166 线段树 单点修改、区间查询
- Wikilo 1191线段树区间修改单点查询
- POJ 2155 Matrix 二维线段树 区间修改 单点查询
- hdu 1754 线段树单点修改+区间查询
- hdu 4819 二维线段树,单点修改区间查询
- 考试 线段树二分+单点修改+区间查询
- [模板练习]线段树的单点修改和区间查询
- HDU1166_敌兵布阵_线段树单点修改区间查询
- 线段树——区间查询+单点修改
- 线段树 单点修改,区间修改
- 【线段树】区间求和+单点修改
- 【线段树】单点求值+区间修改
- zoj (单点更新区间查询:线段树)
- 线段树单点更新和区间查询
- hdu1166(线段树单点更新区间查询)
- 7.1简单线性回归--python机器学习
- 如何解决JSP页面顶端报错 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- Handle Missing aclocal-1.15 Error When Install sshpass
- 6
- 虚拟存储器
- 【数据结构】【线段树】单点修改区间查询
- Linux(Redhat, ubantu)网络配置
- POJ2774
- Webpack入门教程
- 7
- Linux编程基本命令/系统监测命令
- maven学习日志之四 Maven的聚合与继承
- 8
- 乱七八遭的编码总结~