hdu 1166 敌兵布阵
2015-09-23 17:21
423 查看
基本的线段树题目,练一下代码,此外代码中包括两个查询函数,思路有几点不同之处
#include <iostream> #include <stdio.h> #include <cstring> #define MAXN 600000 using namespace std; struct note { int rr,ll; int s; }q[MAXN*3]; int a[MAXN]; void build(int i,int l,int r) { q[i].rr=r; q[i].ll=l; if(r==l) { q[i].s=a[r]; return ; } int m=(r+l)/2; build(i*2,l,m); build(i*2+1,m+1,r); q[i].s=q[i*2].s+q[i*2+1].s; } void add(int i,int t,int b) { q[i].s+=b; if(q[i].ll==t&&t==q[i].rr) { //q[i].s+=b; return ; } int m=(q[i].rr+q[i].ll)/2; if(t<=m) add(i*2,t,b); else add(i*2+1,t,b); } int query(int i,int l,int r) { if(q[i].ll==l&&q[i].rr==r) return q[i].s; int m=(q[i].rr+q[i].ll)/2; if(r<=m) return query(i*2,l,r); else if(l>m) return query(i*2+1,l,r); else return query(i*2,l,m)+query(i*2+1,m+1,r); } int Query(int i,int l,int r) { if(l<=q[i].ll&&r>=q[i].rr) { return q[i].s; } int mid=(q[i].ll+q[i].rr)>>1; if(r<=mid) return Query(i<<1,l,r); else if(l>mid) return Query(i<<1|1,l,r); else return Query(i<<1,l,r)+Query(i<<1|1,l,r); } int main() { // freopen("in.txt","r",stdin); int t; scanf("%d",&t); int tmp=1; while(t--) { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } build(1,1,n); printf("Case %d:\n",tmp++); char ss[10]; while(scanf("%s",ss)!=EOF) { int x,y; if(ss[0]=='E') break; if(ss[0]=='A') { scanf("%d%d",&x,&y); add(1,x,y); } if(ss[0]=='S') { scanf("%d%d",&x,&y); add(1,x,-y); } if(ss[0]=='Q') { scanf("%d%d",&x,&y); // printf("%d%d",x,y); int ans=query(1,x,y); //printf("ss"); printf("%d\n",ans); } } } }
相关文章推荐
- 有了Auto Layout,为什么你还是害怕写UITabelView的自适应布局?
- Grunt - Karma 单元测试
- RESTful 架构详解
- Linux 基础命令(时间)
- JS OffsetParent属性深入解析
- QT显示图片 .转
- ThinkPHP学习
- Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
- C++编程中的格式化输出详解
- 用REDIS实现LBS系统
- 错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- PHP error_reporting() 错误控制函数功能详解
- 一天入门Java快速入门
- html学习笔记-XML-Javascript
- error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”的解决方案
- Spring+MyBatis组合开发简单实例
- SpringMVC笔记——Spring+MyBatis组合开发简单实例
- libxml/tree.h file not found解决办法
- java截取字符串,截串,substring和split,分割字母和数字,正则缝隙