线段树,点更新查找
来源:互联网 发布:数据时代的利与弊作文 编辑:程序博客网 时间:2024/05/18 19:21
线段树主要是利用数组构建完全二叉树,来便于查找和更新
#include<stdio.h>#include<string.h>struct seg{ int l; int r; int n;} T[150011];void build(int l,int r,int k){ int mid; if(l==r) { T[k].l=l; T[k].r=r; T[k].n=0; return ; } mid=(l+r)/2; T[k].l=l; T[k].r=r; T[k].n=0; build(l,mid,2*k); build(mid+1,r,2*k+1);}void insert(int n,int d,int k){ int mid; if(T[k].l==T[k].r&&T[k].l==d) { T[k].n+=n; return ; } mid=(T[k].l+T[k].r)>>1; if(d<=mid)
insert(n,d,2*k); else
insert(n,d,2*k+1); T[k].n=T[2*k].n+T[2*k+1].n;}int ans;void search(int l,int r,int k){ int mid; //printf("l = %d,r = %d\n",l); if(T[k].l==l&&T[k].r==r) { ans+=T[k].n; return ; } mid=(T[k].l+T[k].r)>>1; if(r<=mid)
search(l,r,2*k); else if(l>mid)
search(l,r,2*k+1); else { search(l,mid,2*k); search(mid+1,r,2*k+1); }}int main(){ int Case,TT; int n; int i; int temp; char str[11]; int a,b; scanf("%d",&TT); for(Case=1; Case<=TT; Case++) { scanf("%d",&n); build(1,n,1); for(i=1; i<=n; i++) { scanf("%d",&temp); insert(temp,i,1); } printf("Case %d:\n",Case); while(scanf("%s",str),strcmp(str,"End")) { scanf("%d%d",&a,&b); if(strcmp(str,"Add")==0) insert(b,a,1); else if(strcmp(str,"Sub")==0) insert(-b,a,1); else { ans=0; search(a,b,1); printf("%d\n",ans); } } } return 0;}
0 0
- 线段树,点更新查找
- 线段树,点更新查找
- 线段树更新区间查找点
- 线段树 点更新
- hdu4267线段树段更新,点查找,55棵线段树.
- 线段树点更新poj2828
- hdu3874(线段树点更新)
- 线段树 点更新和段更新
- hdu4973 线段树(题目不错,用了点,段,更新查找还有DFS)
- hdu1754 I Hate It(线段树点的更新和区间查找)
- 线段树的建立、更新、查找
- HDU1754 <线段树创建,查找,更新>
- UESTC 1558 线段树点更新
- hdu4288 线段树之点更新
- HDU1754--点更新的线段树
- hdu2795Billboard (线段树,看作点更新)
- 线段树点更新+反素数+poj2777
- 线段树点更新(好)hdu4288
- Android中Preference的使用以及监听事件分析
- angularjs发送post请求,servlet无法用getParameter(name)获取的解决方法,亲测有效
- 1、网络爬虫之规则之requests库入门
- Palindrome Number
- git 撤消远程仓库提交
- 线段树,点更新查找
- C++ 指针类型
- 适配器模式
- python PIL 图像处理 (二)
- 热修复之--错误
- MKL学习——向量操作
- PHP swoole实现过10分钟 执行任务
- 玩codecombat游戏,沙漠有一关牧羊人卡住了,求解答
- 剑指offer——用两个栈实现队列