Appoint description: 
System Crawler  (2016-04-24)

Description

“学习本无底,前进莫徬徨。” 秋实大哥对一旁玩手机的学弟说道。

秋实大哥是一个爱学习的人,今天他刚刚学习了线段树这个数据结构。

为了检验自己的掌握程度,秋实大哥给自己出了一个题,同时邀请大家一起来作。

秋实大哥的题目要求你维护一个序列,支持两种操作:一种是修改某一个元素的值;一种是询问一段区间的和。

Input

第一行包含一个整数n,表示序列的长度。

接下来一行包含n个整数ai,表示序列初始的元素。

接下来一行包含一个整数m,表示操作数。

接下来m行,每行是以下两种操作之一:

1 x v : 表示将第x个元素的值改为v
2 l r : 表示询问[l,r]这个区间的元素和

1≤n,m,v,ai≤100000,1≤l≤r≤n。

Output

对于每一个2lr操作,输出一个整数占一行,表示对应的答案。

Sample Input


1 2 3 

2 1 2 
1 1 5 
2 1 2

Sample Output

3

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
typedef long long ll;
typedef unsigned long long Ull;
#define MM(a,b) memset(a,b,sizeof(a));
const double eps = 1e-10;
const int inf = 0x3f3f3f3f;
const double pi=acos(-1);
const int maxn=100000;
struct Tree{
int l,r;
ll sum;//注意sum要用ll
int mid()
{
return (l+r)>>1;
}
}tree[4*maxn+10]; void pushup(int k)
{
tree[k].sum=tree[2*k].sum+tree[2*k+1].sum;
} void build(int k,int l,int r)
{
tree[k].l=l;tree[k].r=r;
if(l==r) scanf("%lld",&tree[k].sum);
else
{
int mid=tree[k].mid();
build(2*k,l,mid);
build(2*k+1,mid+1,r);
pushup(k);
}
} void update(int id,int pos,int val)
{
if(tree[id].l==tree[id].r)
tree[id].sum=val;
else
{
int mid=tree[id].mid();
if(pos<=mid) update(2*id,pos,val);
else update(2*id+1,pos,val);
pushup(id);
}
} ll query(int id,int l,int r)
{
if(l<=tree[id].l&&tree[id].r<=r)
return tree[id].sum;
else
{
int mid=tree[id].mid();
ll sl=0,sr=0;
if(l<=mid) sl=query(2*id,l,r);
if(r>mid) sr=query(2*id+1,l,r);//跟单点更新的update有点不同,单点更新的是只//能走一个方向
pushup(id);
return sl+sr;
}
} int main()
{
int n,m;
while(~scanf("%d",&n))
{
build(1,1,n);
scanf("%d",&m);
while(m--)
{
int op,x,y;
scanf("%d %d %d",&op,&x,&y);
if(op==1)
update(1,x,y);
else
printf("%lld\n",query(1,x,y));
}
}
return 0;
}

  

最新文章

  1. 整理react native的资料
  2. 设置Textview最大长度,超出显示省略号
  3. lunece全文检索的入门与简单优化
  4. sqlyog不用密码登陆(强制取消)
  5. HierarchyViewer for iOS 2.0 BETA Introduction
  6. Reapter控件的特殊使用:使用EVAL调取asp:Repeater里面绑定的值来进行判断 根据从数据库获取的数据进行判断 ,进而显示成想要的内容
  7. 有关big.LITTLE,你需要知道的十件事情
  8. Continuous Subarray Sum
  9. 基于cfx的webservice调用
  10. Split字符串分割函数
  11. DAG的动态规划 (UVA 1025 A Spy in the Metro)
  12. STL vector+sort排序和multiset/multimap排序比较
  13. linux eclipse中运行android AVD 错误
  14. java中关于编码的问题(字符转换流及字符缓冲流 )
  15. Java学习笔记--异常描述
  16. PYTHON 词云
  17. Mysql Navicat数据库定时备份,定时删除
  18. TempData ViewBag ViewData区别
  19. python3+selenium入门13-操作cookie
  20. db2常见错误代码及原因

热门文章

  1. c/c++ 链表实现
  2. mysql——视图——概念
  3. JSR303 校验扩展(分组、按顺序校验)
  4. React基础篇学习
  5. 洛谷 P2384 最短路 题解
  6. 洛谷 P1472 奶牛家谱 Cow Pedigrees 题解
  7. python中self与__init__怎么解释能让小白弄懂?
  8. Codeforce1196_D_F
  9. RabbitMQ入门教程(十三):虚拟主机vhost与权限管理
  10. 普通交叉验证(OCV)和广义交叉验证(GCV)