hihocoder 1077线段树
http://hihocoder.com/problemset/problem/1077
#include <bits/stdc++.h> using namespace std; #define ll long long #define co(x) cout << (x) << endl #define ci(x) cin >> (x) #define sd(x) scanf("%d",&x) #define sf(x) scanf("%lf",&x) #define pc(x) printf("%c",x) #define pd(x) printf("%d",x) #define gcd(x,y) __gcd(x,y) #define w(x) while(x) #define fo(i,j,k) for(int (i) = (j); (i) < (k); (i)++) #define en cout << endl; #define INF 2147483645 #define Maxn 1000010 struct Node{ int left,right; int val; }A[Maxn<<]; void Build(int i,int left,int right){ A[i].left = left; A[i].right = right; if(left == right){//如果该结点是根节点就赋值 ci(A[i].val); return ; } ; Build( i<<,left,mid );//向两边递归 Build(i<<|,mid+,right ); A[i].val = min( A[i<<].val,A[i<<|].val ); //取较小的值(其他类比) } void update(int i,int p,int val){ if( A[i].left == A[i].right ){//找到根结点 A[i].val = val;//修改 return ; } ].right ){//如果结点P在比A[i]的右儿子的右区间小(在右儿子的区间内) update( i<<,p,val );//向右儿子的左区间更新节点 } |].left ){//如果比左儿子的左区间大,则向右更新节点 update(i<<|,p,val); }//向两边同时递归更新节点的值,保证每个被影响的值都被更新 A[i].val = min( A[i<<].val,A[i<<|].val ); } // 如果该行描述一次商品的重量的更改,则接下来为两个整数Pi,Wi, // 表示位置编号为Pi的商品的重量变更为Wi int query(int i,int left,int right){ //left为查询的区间 if( A[i].left >= left && A[i].right <= right ){//在查询区间内,返回该节点的值?? return A[i].val; } int a = INF,b = INF; ].right ){ //如果左范围在A[i]的右儿子的左边,就递归向左边查询 a = query(i << ,left,right); } |].left ){//如果右范围在A[i]的左儿子的右边,就递归向右查询 b = query(i<<|,left,right); } return min(a,b);//回朔返回左右儿子的较小值 } int main(){ int N,M,a,b,c; while( sd(N)!=EOF ){ Build(,,N); ci(M); fo(i,,M){ scanf("%d %d %d",&a,&b,&c); if(a){ update(,b,c); }else{ printf(,b,c)); } } } }
hihocoder 1077线段树的更多相关文章
- hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)
#1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...
- hihocoder 1080 线段树(区间更新)
题目链接:http://hihocoder.com/problemset/problem/1080 , 两种操作的线段树(区间更新). 这道题前一段时间一直卡着我,当时也是基础不扎实做不出来,今天又想 ...
- hihoCoder #1078 : 线段树的区间修改
题目大意及分析: 线段树成段更新裸题. 代码如下: # include<iostream> # include<cstdio> # include<cstring> ...
- hihoCoder#1079(线段树+坐标离散化)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho所在的学 ...
- hihoCoder week20 线段树的区间修改
区间修改 区间查询 最后一场比赛前的无可救药的热身 #include <bits/stdc++.h> using namespace std; #define mid ((l+r)/2) ...
- Hihocoder #1077 : RMQ问题再临-线段树(线段树:结构体建树+更新叶子往上+查询+巧妙使用father[]+线段树数组要开大4倍 *【模板】)
#1077 : RMQ问题再临-线段树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到:小Hi给小Ho出了这样一道问题:假设整个货架上从左到右摆放了N种商品,并 ...
- hihoCoder#1077 RMQ问题再临-线段树
原题地址 终于做到线段树的题了,因为建树.更新.查询都是递归操作,所以其实挺好写的. 用数组存的树,记得MAX_NODE开成两倍叶节点数大小,否则RE啊..不要问我是怎么知道的. 代码: #inclu ...
- hihocode 1077 : RMQ问题再临-线段树
#1077 : RMQ问题再临-线段树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到:小Hi给小Ho出了这样一道问题:假设整个货架上从左到右摆放了N种商品,并 ...
- hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新
#1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...
随机推荐
- 双系统格式化硬盘后装XP遇到grub rescue的问题
好奇于深度的Deepin系统,给老电脑装了xp和deepin双系统.无奈07年的机子带Deepin,实在是太卡了.正好想给硬盘重新分区,直接将硬盘格式化,重装了xp.于是,问题来了,开机显示: GRU ...
- JavaScript 排序算法——快速排序
常见排序 javaScript 实现的常见排序算法有:冒泡排序.选择排序.插入排序.谢尔排序.快速排序(递归).快速排序(堆栈).归并排序.堆排序. 过程 "快速排序"的思想很简单 ...
- 限制sqlserver最大内存后无法连接-EXEC sp_configure max server memory
在sql server 中设置了过小的 "max server memory"最大内存后,sqlserver可启动,但是无法连接. 网络上流行的"sqlserver 内存 ...
- Cloud Test 在手,宕机时让您不再措手不及
1月28日,Github 上午 10:04 分宕机了,导致全球各地的用户不能访问.官方回复可能是网络中断引起的,到 10:28 分已经可以正常访问. 对于互联网公司来说,一旦宕机就会措手不及,如何才能 ...
- maven安装和环境变量配置
maven安装和环境变量配置 myeclipse自带maven(Maven4MyEclipse)创建项目:新建Web Projects项目,在新建的页面上打上maven的勾.新建的项目里会多出个pom ...
- 【BZOJ3439】 Kpm的MC密码 (TRIE+主席树)
3439: Kpm的MC密码 Description 背景 想Kpm当年为了防止别人随便进入他的MC,给他的PC设了各种奇怪的密码和验证问题(不要问我他是怎么设的...),于是乎,他现在理所当然地忘记 ...
- Gson把json串转换成java实体对象
Gson把json串转换成java实体对象的方法如下: 1.首先导入Gson的jar包,网上可以下载. java实体对象如下: public class Model { private double ...
- xbmc
XBMC是一个优秀的自由和开源的(GPL)媒体中心软件.XBMC最初为Xbox而开发,可以运行在Linux.OSX.Windows.Android4.0系统.XBMC能够播放几乎所有流行的音频和视频格 ...
- JavaScript简介、语法
一.JavaScript简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司 ...
- Perl脚本学习经验(四)--Perl中sftp的使用
使用sftp,需要使用Except模块,该模块需要下载安装在perl目录下,可以上http://www.cpan.org/上下载对应的安装包:1. 用root用户登录环境:2. cd /usr/lib ...