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都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...
随机推荐
- Qt之json解析
Jsoner::Jsoner(QObject *parent) : QObject(parent){ QJsonObject json; json.insert("loginna ...
- CSS3 学习
border-radius: 半径,不用学了,用得很熟了,但要记得它的某一个角的写法是border-top/bottom-left/right-radius: ,参数中的两个值为先左右后上下,支持百分 ...
- 关于优化C#程序的五十种方法
一.用属性代替可访问的字段 1..NET数据绑定只支持数据绑定,使用属性可以获得数据绑定的好处: 2.在属性的get和set访问器重可使用lock添加多线程的支持. 二.readonly(运行时常量) ...
- C#中判断bool 类型 代码的最短写法
看到一个关于写最短代码的, 是一个bool类型判断的: public bool IsNull(object val) { if (val == null) { return true; } e ...
- C语言中.h和.c文件解析(很精彩)
C语言中.h和.c文件解析(很精彩) 简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析 ...
- [Jquery] js获取浏览器滚动条距离顶端的距离
需要用js获取滚动条距离窗口顶端的距离和js获取浏览器可视化窗口的大小 一.jQuery获取的相关方法 jquery 获取滚动条高度 获取浏览器显示区域的高度 : $(window).height( ...
- bzoj 3165: [Heoi2013]Segment 动态凸壳
3165: [Heoi2013]Segment Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 202 Solved: 89[Submit][Stat ...
- 从 IT 中断中学到的最佳监控实践
每个运维监控工具,一般要追踪数十万个内部性能指标.学会对哪些事件进行告警以及监控确实需要花费想当长的一段时间.因为,并非所有的指标等级都是一致.因此我们需要摸索出一套简单的方法,便于管理所有指标,而且 ...
- 【网络流24题】No.9 方格取数问题 (二分图点权最大独立集)
[题意] 在一个有 m*n 个方格的棋盘中, 每个方格中有一个正整数. 现要从方格中取数, 使任意 2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法. 输入文件示例inp ...
- c#中总是提示“在代码运行时或者在禁用“只要一个进程中断,就中断所有进程”选项时,不允许进行更改。
但是根据它提示的修改方法,还是提示这个. “此选项可在“工具”->“选项”->“调试”中启用.” 根本不起作用,后来试着,要这样操作: 工具->选项->调试->编辑并继续 ...