codevs 1080 线段树练习
链接:http://codevs.cn/problem/1080/
先用树状数组水一发,再用线段树水一发
树状数组代码:84ms
- #include<cstdio>
- #include<iostream>
- #include<algorithm>
- #include<math.h>
- #include<string.h>
- #include<vector>
- #include<queue>
- #include<iterator>
- #include<vector>
- #include<set>
- #define dinf 0x3f3f3f3f
- typedef long long ll;
- const int Max=(<<)+;
- using namespace std;
- #define SIZE 1000005
- int c[SIZE],a[SIZE];
- int Lowbit(int x)
- {
- return x&(-x);
- }
- int Sum(int x)
- {
- int sum=;
- while(x>)
- {
- sum+=c[x];
- x-=Lowbit(x);
- }
- return sum;
- }
- void Update(int i,int x)
- {
- while(i<=SIZE)//要把所有的与i相关的c数组中的值全部更新,不然会出错
- {
- c[i]+=x;
- i+=Lowbit(i);
- }
- }
- int main()
- {
- int n,m;
- while(~scanf("%d",&n))
- {
- memset(a,,sizeof(a));
- memset(c,,sizeof(c));
- for(int i=;i<=n;i++)
- {
- scanf("%d",&a[i]);
- Update(i,a[i]);
- }
- scanf("%d",&m);
- int op,node,num;
- for(int i=;i<=m;i++)
- {
- scanf("%d %d %d",&op,&node,&num);
- if(op==)
- Update(node,num);
- else if(op==)
- {
- printf("%d\n",Sum(num)-Sum(node-));
- }
- }
- }
- return ;
- }
线段树代码:48ms
- #include<cstdio>
- using namespace std;
- struct RE
- {
- int sum,l,r;
- }tree[];
- int a[];
- void build(int node,int l,int r)
- {
- int mid=(l+r)>>;
- tree[node].l=l;
- tree[node].r=r;
- if (l==r)
- {
- tree[node].sum=a[l];
- return;
- }
- build(*node,l,mid);
- build(*node+,mid+,r);
- tree[node].sum+=tree[*node].sum+tree[*node+].sum;
- }
- void updata(int node,int a,int b)
- {
- int mid=(tree[node].l+tree[node].r)>>;
- if (mid==tree[node].l&&mid==tree[node].r)
- {
- tree[node].sum+=b;
- return;
- }
- if (a<=mid)
- updata(*node,a,b);
- else
- updata(*node+,a,b);
- tree[node].sum+=b;
- }
- int query(int node,int l,int r)
- {
- int mid=(tree[node].l+tree[node].r)>>;
- if (tree[node].l==l&&tree[node].r==r)
- return tree[node].sum;
- if (l>mid)
- return query(*node+,l,r);
- if (r<=mid)
- return query(*node,l,r);
- return query(*node,l,mid)+query(*node+,mid+,r);
- }
- int main()
- {
- int n,m;
- scanf("%d",&n);
- int i,j;
- for (i=;i<=n;i++)
- scanf("%d",&a[i]);
- build(,,n);
- scanf("%d",&m);
- int sign,a,b;
- for (i=;i<=m;i++)
- {
- scanf("%d%d%d",&sign,&a,&b);
- if (sign==) updata(,a,b);
- else printf("%d\n",query(,a,b));
- }
- return ;
- }
codevs 1080 线段树练习的更多相关文章
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1080 线段树练习 CDQ分治
codevs 1080 线段树练习 http://codevs.cn/problem/1080/ 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 一行N个 ...
- codevs 1080 线段树练习--用树状数组做的
1080 线段树练习 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 一行N个方格,开始每个格子里都有一个整数.现在动态 ...
- Codevs 1080 线段树练习(CDQ分治)
1080 线段树练习 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 一行N个方格,开始每个格子里都有 ...
- codevs——1080 线段树练习
1080 线段树练习 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 一行N个方格,开始每个格子里都有 ...
- Codevs 1080 线段树联系
题目描述 Description 一行N个方格,开始每个格子里都有一个整数.现在动态地提出一些问题和修改:提问的形式是求某一个特定的子区间[a,b]中所有元素的和:修改的规则是指定某一个格子x,加上或 ...
- codevs 1080 线段树练习(线段树)
题目: 题目描述 Description 一行N个方格,开始每个格子里都有一个整数.现在动态地提出一些问题和修改:提问的形式是求某一个特定的子区间[a,b]中所有元素的和:修改的规则是指定某一个格子x ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
随机推荐
- Docker 容器测试全探索
导读 当我们构建好Docker镜像并利用多套容器共同组合成应用程序,建立起持续交付通道,了解了如何将新创建的镜像纳入到生产或者测试环境当中之后,新的问题来了——我们该如何测试自己的Docker容器?测 ...
- [codevs1154][COJ0177][NOIP2006]能量项链
[codevs1154][COJ0177][NOIP2006]能量项链 试题描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这 ...
- jquery的change():下拉框值改变时触发
<script src="jquery.min.js" type="text/javascript"></script> <scr ...
- ImageView显示网络图片
package com.example.urlimage; import java.io.InputStream; import java.net.HttpURLConnection; import ...
- IE盒模型
IE5.5及更早的版本使用的是IE盒模型,在在IE6及以上版本的浏览器中,浏览器支持一种解决了这种差异的可选的渲染模式,也开始遵循标准模式. IE盒模型和W3C盒模型的差异: IE盒模型,块元素的实际 ...
- Hashtable和HashMap类的区别
Hashtable和HashMap类有三个重要的不同之处.第一个不同主要是历史原因.Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现. ...
- Kali Linux渗透基础知识整理(一):信息搜集
写在前面的废话:最近要给一些新人做培训,整理些东西,算不上什么太高端的内容,只是简单的整理下了,我觉得对于小白的话也还算是干货.在乌云水了几年,算不上什么大神水平,最近生活费紧张,现在打算在FreeB ...
- 1.AngularJS初探
1.需要什么前端开发环境 1)代码编辑工具 webstorm 2)断点调试工具 chrome插件Batarang 3)版本管理 tortoiseGit 4)代码合并和混淆工具 grunt-contri ...
- php5.3 appache phpstudy win7win8win10下 运行速度慢解决办法
在部署服务器以及本地测试的时候发现了一个奇怪的现象,运行PHP程序的时候非常慢,起先以为是网速的原因,后经本地测试发现速度依旧非常慢,打开一个页面差不多要用时3秒以上,这肯定是不正常的,因为 ...
- [20160701]DevideByZeroWithoutNoException——from 《Java How To Program (Early Objects), 10th》
//一段优美的例子 import java.util.Scanner; import java.util.InputMismatchException; public class DevideByZe ...