HDU4027 Can you answer these queries? 线段树
2016-05-06 15:56
225 查看
思路:http://www.cnblogs.com/gufeiyang/p/4182565.html
写写线段树
View Code
写写线段树
#include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> using namespace std; typedef long long LL; const int N=1e5+5; LL a[N<<2]; void build(int rt,int l,int r){ if(l==r){ scanf("%I64d",&a[rt]); return; } int m=(l+r)>>1; build(rt<<1,l,m); build(rt<<1|1,m+1,r); a[rt]=a[rt<<1]+a[rt<<1|1]; } void modify(int rt,int l,int r,int x,int y){ if(x<=l&&r<=y){ if(a[rt]==r-l+1)return; } if(l==r){ a[rt]=sqrt(1.0*a[rt]); return; } int m=(l+r)>>1; if(x<=m)modify(rt<<1,l,m,x,y); if(y>m)modify(rt<<1|1,m+1,r,x,y); a[rt]=a[rt<<1]+a[rt<<1|1]; } LL ask(int rt,int l,int r,int x,int y){ if(x<=l&&r<=y)return a[rt]; LL ans=0; int m=(l+r)>>1; if(x<=m)ans+=ask(rt<<1,l,m,x,y); if(y>m)ans+=ask(rt<<1|1,m+1,r,x,y); return ans; } int main(){ int n,cas=0; while(~scanf("%d",&n)){ printf("Case #%d:\n",++cas); build(1,1,n); int q; scanf("%d",&q); while(q--){ int op,x,y; scanf("%d%d%d",&op,&x,&y); if(x>y)swap(x,y); if(op)printf("%I64d\n",ask(1,1,n,x,y)); else modify(1,1,n,x,y); } printf("\n"); } return 0; }
View Code
相关文章推荐
- Codeforces Round #350 (Div. 2) E. Correct Bracket Sequence Editor 栈 链表
- TP框架整合Swagger UI接口文档
- 打印spi GUID
- Android Volley 之自定义Request
- UILabel
- UINavigationBar UINavigationItem UIBarButtonItem UIToolBar 和 UITabBar UITabBarItem
- document.queryCommandState
- UI组件篇(下)
- UI组件篇(上)
- UIViewController 键盘弹出或者销售
- Hibernate学习笔记-懒加载Lazy-true
- vuejs资料收集
- easyUi 后台首页
- easyUi 用户登录
- CF CROC 2016 Intellectual Inquiry
- easyUi 无限极分类
- ios上 更改 状态栏(UIStatusBar)的颜色
- jpa,querydsl
- ajax request VS normal request
- Android字符串相关类 - CharSequence