洛谷P3374

 //询问区间和,支持单点修改
#include <cstdio> using namespace std; const int maxn=; struct treetype
{
int l,r,sum;
}; treetype a[*maxn];
int num[maxn]; void build(int k,int l,int r)
{
a[k].l=l;a[k].r=r;
if (l==r)
{
a[k].sum=num[l];
return;
}
int mid=(l+r)>>,i=k<<;
build(i,l,mid);
build(i+,mid+,r);
a[k].sum=a[i].sum+a[i+].sum;
}
void change(int k,int x,int t)
{
if (a[k].l==a[k].r)
{
a[k].sum+=t;
return;
}
int mid=(a[k].l+a[k].r)>>,i=k<<;
if (x<=mid) change(i,x,t);
else change(i+,x,t);
a[k].sum=a[i].sum+a[i+].sum;
}
int query(int k,int x,int y)
{
if (x<=a[k].l && a[k].r<=y) return a[k].sum;
int mid=(a[k].l+a[k].r)>>,ans=,i=k<<;
if (x<=mid) ans=query(i,x,y);
if (mid<y) ans+=query(i+,x,y);
return ans;
} int main()
{
int n,m;
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) scanf("%d",&num[i]);
build(,,n);
//for (int i=1;i<=n*2;i++) printf("%d %d %d %d\n",i,a[i].l,a[i].r,a[i].sum);
for (int i=;i<=m;i++)
{
int t,x,y;
scanf("%d%d%d",&t,&x,&y);
if (t==) change(,x,y);
else printf("%d\n",query(,x,y));
}
return ;
}

最新文章

  1. Unity3D 5.x 简单实例 - 脚本编写
  2. js 默认选中分页条件项
  3. 快乐的JS正则表达式(三)
  4. Java基础之集合框架——使用堆栈Stack&lt;&gt;对象模拟发牌(TryDeal)
  5. python3 nonlocal vs global
  6. Windows 7系统安装MySQL5.5.21图解
  7. php中 $$str 中 &quot;$$&quot; 的解释
  8. HDU 5650 so easy
  9. 初探XRebel
  10. [Swift]LeetCode290. 单词模式 | Word Pattern
  11. 从HTTL模板引擎看软件设计原则
  12. 从输入URL按下回车到页面展现,中间发生了什么?
  13. 记录一次Service被注入mapper实例的错误
  14. svn 使用教程
  15. django-restful风格
  16. 3d tech
  17. Codeforces Round #222 (Div. 1) D. Developing Game 扫描线
  18. centos下安装ipython(minglnghang命令行)
  19. HandyJSON代码阅读
  20. 记录个人数组、字符串自己常忘记的方法,以及ES常用处理方式

热门文章

  1. 004-URL编码转换函数:escape()、encodeURI()、encodeURIComponent()
  2. H3C CAS 介绍 & 基本概念
  3. Go-内存To Be
  4. 移动端安全 - 安卓Android - 工具相关
  5. smarty中判断数组是否为空的方法
  6. 问题 1436: 地宫取宝 (dp)
  7. JavaScript 各种遍历方式详解及总结
  8. mpvue 无法获取$store的问题
  9. 快速的统计千万级别uv
  10. Linux学习笔记之文件与文件系统的压缩与打包