H - 秋实大哥与线段树

Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu

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


7

#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要用llint 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);elseprintf("%lld\n",query(1,x,y));}}return 0;
}

  

转载于:https://www.cnblogs.com/smilesundream/p/5441909.html

CDOJ 1073 线段树 单点更新+区间查询 水题相关推荐

  1. HDU - 1166敌兵布阵+HDU-1754 I Hate It (线段树单点更新——累加/最大值)

    线段树单点更新,模板题 HDU1166 敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和T ...

  2. 【原创】tyvj1038 忠诚 计蒜客 管家的忠诚 线段树(单点更新,区间查询)...

    [原创]tyvj1038 忠诚 & 计蒜客 管家的忠诚 & 线段树(单点更新,区间查询) 最简单的线段树之一,中文题目,不翻译.... 注释讲的比较少,这已经是最简单的线段树,如果看不 ...

  3. HDUOJ----1166敌兵布阵(线段树单点更新)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  4. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)

    题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...

  5. 线段树(单点更新,区间查询) HDU 1754 I Hate It

    题目链接 线段树的模板 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include&l ...

  6. FZU 2297 Number theory【线段树/单点更新/思维】

    Given a integers x = 1, you have to apply Q (Q ≤ 100000) operations: Multiply, Divide. Input First l ...

  7. poj3468 线段树区间更新+区间查询

    题目链接: http://poj.org/problem?id=3468 A Simple Problem with Integers Time Limit: 5000MS   Memory Limi ...

  8. 线段树——单点更新(二)

    HDU 4217 Data Structure? http://acm.hdu.edu.cn/showproblem.php?pid=4217 CZ做的一道题目,我帮忙看了看. 题意:给定N个数(1- ...

  9. CodeforcesBeta Round #19 D. Points 离线线段树 单点更新 离散化

    题目链接: http://codeforces.com/contest/19/problem/D 题意: 有三种操作"add x y"往平面上添加(x,y)这个点,"re ...

最新文章

  1. metasploit-smb扫描获取系统信息
  2. 实验吧 登录一下好吗
  3. C# Winform验证码
  4. 编写超级可读代码的15个最佳实践
  5. RedisUtil - Redis功能介绍,五种数据类型的使用,Spring和Redis的集成
  6. YAML 学习笔记 .yml
  7. mysql数据库连接数瓶颈_MySQL数据库性能优化之硬件瓶颈分析
  8. 【原创】VS2010 C++ Debug 出现 SXS: RtlCreateActivati...
  9. lua upvalue
  10. 魔兽世界服务器修改模型,《魔兽世界》魔兽世界修改模型攻略
  11. 寄存器的七种寻址方式
  12. 第十届江泽涵杯数学建模与计算机应用竞赛试题,2016江泽涵杯一等奖论文.doc...
  13. 东北大学OJ-1208: 实验2-7 :计算ASCII码值并输出
  14. Java接入支付宝支付(沙箱)
  15. Android:alpha换算表
  16. 新游戏中出现的基于BSP场景分割技术
  17. 全局择优搜索、A*算法、宽度优先算法解决八数码问题
  18. WPF--控件(代码讲解)
  19. 利用XGBoost实现短期电力负荷预测
  20. 明明价格下降了,为什么你却花了更多钱?

热门文章

  1. T-SQL查询——详解公用表达式(CTE)
  2. 祝我亲爱的天蝎GG生日快乐!+相识3周年小纪念
  3. 区块链技术的本质是分布式数据库
  4. 区块链笔记-Hash算法
  5. gatsby_将您的GraphCMS数据导入Gatsby
  6. java 学到什么实习_我如何获得外展实习机会以及到目前为止所学到的知识
  7. 1145 Hashing - Average Search Time
  8. PAT(甲级)2018年冬季考试 7-3 Vertex Coloring
  9. 1102 Invert a Binary Tree 需再做
  10. 数据库备份到文件服务器,数据库文件备份到云服务器上