线段树基础
来源:互联网 发布:qq飞车终极迈凯轮数据 编辑:程序博客网 时间:2024/05/17 07:09
HDU1166
题目链接
题目类型:线段树
题解:线段树经典题,维护区间和(存个模板);
Code:
#include <cstdio>//维护区间和using namespace std;int a[50005];int tree[50005*4];char s[100];void build(int p,int l,int r){ if(l==r) { tree[p]=a[l]; return ; } int mid = (l+r)>>1; build(2*p,l,mid); build(2*p+1,mid+1,r); tree[p]=tree[2*p]+tree[2*p+1];}void add(int p,int l,int r,int x ,int num){ if(l==r) { tree[p]+=num; return; } int mid=(l+r)>>1; if(x<=mid)add(2*p,l,mid,x,num); else add(p*2+1,mid+1,r,x,num); tree[p]=tree[2*p]+tree[2*p+1];}int find(int p,int l,int r,int x,int y){ if(x <= l&& r <= y) { return tree[p]; } int mid=(l+r)>>1; if(y<=mid)return find(p*2,l,mid,x,y); else if(x>mid)return find(2*p+1,mid+1,r,x,y); return (find(p*2,l,mid,x,mid))+(find(p*2+1,mid+1,r,mid+1,y));}int main(){ int n,k=1,T; scanf("%d",&T); while(T--) { scanf("%d",&n); printf("Case %d:\n",k); k++; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } build(1,1,n); while(scanf(" %s",s)!=EOF) { if(s[0]=='E')break; int x,y; scanf("%d%d",&x,&y); if(s[0]=='A') { add(1,1,n,x,y); } else if(s[0]=='S') { add(1,1,n,x,-y); } else if(s[0]=='Q') { printf("%d\n",find(1,1,n,x,y)); } } } return 0;}
(弱明天要考线代。。。可能会停更一回)
0 0
- 线段树基础
- 基础线段树
- 线段树基础题
- 线段树 基础
- 线段树基础篇
- POJ2528线段树基础
- 线段树基础
- 线段树基础 poj2104
- 线段树基础 poj2352
- 线段树基础
- 算法基础 - 线段树
- 线段树-基础
- HDU1556 - 线段树基础
- 线段树基础总结
- 线段树基础入门
- 线段树基础
- 线段树(基础)
- 线段树基础
- BookSystem开发步骤
- 二级菜单悬停
- WIN7 64位可使用的C#程序生成器
- 博览网_C++_第三周_Rectangle类的初步实现(二)
- mysql的基本操作语句
- 线段树基础
- LeetCode 5. Longest Palindromic Substring
- 对于一些Angularjs随笔
- 阿里实习 2017/5/4
- Selenium2+python自动化系列1-环境搭建
- hexo本地和github不一致
- 应用统计学与R语言实现学习笔记(三)——描述性统计
- Hadoop入门基础教程 Hadoop之单机模式搭建
- Java面试题集(86-115)