hdu1166 敌兵布阵,线段树
来源:互联网 发布:ntfs for mac 14破解 编辑:程序博客网 时间:2024/05/17 03:56
最近开始学习线段树,前天开始的时候看完了百度百科上的线段树介绍,上网搜了许多题目,结果第一次写线段树,居然是二维。。。果断不可做。。。写了四个小时发现思路不对。。。
于是,听说胡浩有一篇线段树的博客很经典,就开始按照博客开始做题了。。。
这是我ac的第一道线段树题目
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#define INF 200000000struct node{ int u; int v; int cover; int left; int right;}tree[100001];int num[50005],aa,bb,person,tot;void build(int a,int b){ int i,j,k,l,mid; tot++; l=tot; tree[l].u=a; tree[l].v=b; tree[l].cover=0; if(b-a>0) { mid=(a+b)/2; tree[l].left=tot+1; build(a,mid); tree[l].right=tot+1; build(mid+1,b); }}void insert(int a){ int mid; if(aa>=tree[a].u&&aa<=tree[a].v) tree[a].cover+=bb;; if(tree[a].v-tree[a].u>0) { mid=(tree[a].u+tree[a].v)/2; if(aa<=mid) insert(tree[a].left); else insert(tree[a].right); }}void delete(int a){ int mid; if(aa>=tree[a].u&&aa<=tree[a].v) tree[a].cover-=bb; if(tree[a].v-tree[a].u>0) { mid=(tree[a].v+tree[a].u)/2; if(aa<=mid) delete(tree[a].left); else delete(tree[a].right); }}void search(int a){ int mid; if(tree[a].u>=aa&&tree[a].v<=bb) person+=tree[a].cover; else { if(tree[a].v-tree[a].u>0) { mid=(tree[a].u+tree[a].v)/2; if(bb<=mid) search(tree[a].left); else if(aa>mid) search(tree[a].right); else { search(tree[a].left); search(tree[a].right); } } }}int main(){ int n,i,j,k,l,a,b,t; char s[15]; while(scanf("%d",&t)!=EOF) { for(i=1;i<=t;i++) { printf("Case %d:\n",i); scanf("%d",&n); for(j=1;j<=n;j++) { scanf("%d",&num[j]); } tot=0; build(1,n); for(j=1;j<=n;j++) { aa=j; bb=num[j]; insert(1); } while(scanf("%s",&s)) { if(strcmp(s,"End")==0) break; scanf("%d%d",&aa,&bb); if(s[0]=='A') { insert(1); } else if(s[0]=='S') { delete(1); } else if(s[0]='Q') { person=0; search(1); printf("%d\n",person); } } } } return 0;}
- 线段树 hdu1166 (敌兵布阵)
- 【线段树】 hdu1166 敌兵布阵
- hdu1166 敌兵布阵 线段树
- hdu1166敌兵布阵 (线段树)
- hdu1166 敌兵布阵,线段树
- HDU1166 敌兵布阵(线段树)
- hdu1166 敌兵布阵 线段树
- hdu1166- 敌兵布阵线段树
- 【线段树】hdu1166敌兵布阵
- hdu1166 敌兵布阵(线段树)
- 线段树 HDU1166 敌兵布阵
- hdu1166-敌兵布阵(线段树)
- hdu1166 敌兵布阵 线段树
- hdu1166-敌兵布阵 线段树
- hdu1166敌兵布阵 线段树
- HDU1166 敌兵布阵(线段树)
- hdu1166 敌兵布阵 线段树
- HDU1166 -敌兵布阵(线段树)
- 深度探索c++对象模型
- Android 网络超时 app闪退?
- 走进C++程序世界-----STL容器介绍
- ArrayList removeRange方法分析
- Git 忽略文件的模式
- hdu1166 敌兵布阵,线段树
- canvas 合成globalCompositeOperation
- eclipse hadoop开发环境配置
- C++中const:常引用,常对象,常对象成员
- C++ 命名空间namespace
- Sudoku Solver 破解数独 @LeetCode 附DFS感想
- inotifywait监控目录更改
- C++必知必会之(18)函数对象
- IBM敏捷转型前所遇到的最大障碍