博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1166 树状数组解
阅读量:5135 次
发布时间:2019-06-13

本文共 1261 字,大约阅读时间需要 4 分钟。

 树状数组解决   (关于树状数组参考大佬的博客)

然后就很好理解这题了,代码附上

 

/*hdu 1166 单点修改,区间查询*/#include 
#include
#include
#define MAX 50010using namespace std;int tree[MAX];int arr[MAX];int n;int lowbit(int x){ return x&(-x);} //初始化树状数组 void init (){ tree[0] = 0; for (int i=1;i<=n;++i) { tree[i]= 0; for (int j=i-lowbit(i)+1;j<=i;++j) tree[i]+=arr[j]; }}//获取区间和 int get_sum(int x){ int ans = 0; for (int i=x;i>0;i-=lowbit(i)) ans+=tree[i]; return ans;}//更新数据 int add(int x,int p){ for (int i=x;i<=n;i+=lowbit(i)) tree[i]+=p;}int main (){ char ch[10]; int T = 0; int a,b; cin>>T; for (int k=1;k<=T;++k) { cin >> n; for (int i=1;i<=n;++i) scanf ("%d",&arr[i]); init();//更新 printf ("Case %d:\n",k); //开始查询等操作 while(~scanf ("%s",ch)) { if (!strcmp("End",ch)) break; scanf ("%d%d",&a,&b); if (!strcmp("Query",ch)) printf ("%d\n",get_sum(b)-get_sum(a-1)); else if (!strcmp("Add",ch)) add(a,b); else add(a,-b); } } return 0;}/*1101 2 3 4 5 6 7 8 9 10Query 1 3Add 3 6Query 2 7Sub 10 2Add 6 3Query 3 10End */

 

转载于:https://www.cnblogs.com/yuluoluo/p/8664081.html

你可能感兴趣的文章
想做移动开发,先看看别人怎么做
查看>>
Eclipse相关集锦
查看>>
继承条款effecitve c++ 条款41-45
查看>>
Java泛型的基本使用
查看>>
1076 Wifi密码 (15 分)
查看>>
noip模拟赛 党
查看>>
bzoj2038 [2009国家集训队]小Z的袜子(hose)
查看>>
Java反射机制及其Class类浅析
查看>>
Postman-----如何导入和导出
查看>>
移动设备显示尺寸大全 CSS3媒体查询
查看>>
图片等比例缩放及图片上下剧中
查看>>
background-clip,background-origin
查看>>
【Linux】ping命令详解
查看>>
对团队成员公开感谢博客
查看>>
java学习第三天
查看>>
django+uwsgi+nginx+sqlite3部署+screen
查看>>
浅谈项目需求变更管理
查看>>
经典算法系列一-快速排序
查看>>
设置java web工程中默认访问首页的几种方式
查看>>
ASP.NET MVC 拓展ViewResult实现word文档下载
查看>>