CDOJ 1073 线段树 单点更新+区间查询 水题
Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu
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
3
1 2 3
3
2 1 2
1 1 5
2 1 2
Sample Output
3
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 线段树 单点更新+区间查询 水题相关推荐
- HDU - 1166敌兵布阵+HDU-1754 I Hate It (线段树单点更新——累加/最大值)
线段树单点更新,模板题 HDU1166 敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和T ...
- 【原创】tyvj1038 忠诚 计蒜客 管家的忠诚 线段树(单点更新,区间查询)...
[原创]tyvj1038 忠诚 & 计蒜客 管家的忠诚 & 线段树(单点更新,区间查询) 最简单的线段树之一,中文题目,不翻译.... 注释讲的比较少,这已经是最简单的线段树,如果看不 ...
- HDUOJ----1166敌兵布阵(线段树单点更新)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- poj 2892---Tunnel Warfare(线段树单点更新、区间合并)
题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...
- 线段树(单点更新,区间查询) HDU 1754 I Hate It
题目链接 线段树的模板 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include&l ...
- FZU 2297 Number theory【线段树/单点更新/思维】
Given a integers x = 1, you have to apply Q (Q ≤ 100000) operations: Multiply, Divide. Input First l ...
- poj3468 线段树区间更新+区间查询
题目链接: http://poj.org/problem?id=3468 A Simple Problem with Integers Time Limit: 5000MS Memory Limi ...
- 线段树——单点更新(二)
HDU 4217 Data Structure? http://acm.hdu.edu.cn/showproblem.php?pid=4217 CZ做的一道题目,我帮忙看了看. 题意:给定N个数(1- ...
- CodeforcesBeta Round #19 D. Points 离线线段树 单点更新 离散化
题目链接: http://codeforces.com/contest/19/problem/D 题意: 有三种操作"add x y"往平面上添加(x,y)这个点,"re ...
最新文章
- metasploit-smb扫描获取系统信息
- 实验吧 登录一下好吗
- C# Winform验证码
- 编写超级可读代码的15个最佳实践
- RedisUtil - Redis功能介绍,五种数据类型的使用,Spring和Redis的集成
- YAML 学习笔记 .yml
- mysql数据库连接数瓶颈_MySQL数据库性能优化之硬件瓶颈分析
- 【原创】VS2010 C++ Debug 出现 SXS: RtlCreateActivati...
- lua upvalue
- 魔兽世界服务器修改模型,《魔兽世界》魔兽世界修改模型攻略
- 寄存器的七种寻址方式
- 第十届江泽涵杯数学建模与计算机应用竞赛试题,2016江泽涵杯一等奖论文.doc...
- 东北大学OJ-1208: 实验2-7 :计算ASCII码值并输出
- Java接入支付宝支付(沙箱)
- Android:alpha换算表
- 新游戏中出现的基于BSP场景分割技术
- 全局择优搜索、A*算法、宽度优先算法解决八数码问题
- WPF--控件(代码讲解)
- 利用XGBoost实现短期电力负荷预测
- 明明价格下降了,为什么你却花了更多钱?