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线段树的更多相关文章

  1. hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)

    #1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...

  2. hihocoder 1080 线段树(区间更新)

    题目链接:http://hihocoder.com/problemset/problem/1080 , 两种操作的线段树(区间更新). 这道题前一段时间一直卡着我,当时也是基础不扎实做不出来,今天又想 ...

  3. hihoCoder #1078 : 线段树的区间修改

    题目大意及分析: 线段树成段更新裸题. 代码如下: # include<iostream> # include<cstdio> # include<cstring> ...

  4. hihoCoder#1079(线段树+坐标离散化)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho所在的学 ...

  5. hihoCoder week20 线段树的区间修改

    区间修改 区间查询 最后一场比赛前的无可救药的热身 #include <bits/stdc++.h> using namespace std; #define mid ((l+r)/2) ...

  6. Hihocoder #1077 : RMQ问题再临-线段树(线段树:结构体建树+更新叶子往上+查询+巧妙使用father[]+线段树数组要开大4倍 *【模板】)

    #1077 : RMQ问题再临-线段树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到:小Hi给小Ho出了这样一道问题:假设整个货架上从左到右摆放了N种商品,并 ...

  7. hihoCoder#1077 RMQ问题再临-线段树

    原题地址 终于做到线段树的题了,因为建树.更新.查询都是递归操作,所以其实挺好写的. 用数组存的树,记得MAX_NODE开成两倍叶节点数大小,否则RE啊..不要问我是怎么知道的. 代码: #inclu ...

  8. hihocode 1077 : RMQ问题再临-线段树

    #1077 : RMQ问题再临-线段树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到:小Hi给小Ho出了这样一道问题:假设整个货架上从左到右摆放了N种商品,并 ...

  9. hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新

    #1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...

随机推荐

  1. 【转】EXT JS MVC开发模式

    原文链接:EXT JS MVC开发模式 在app(亦即根目录)文件夹下面创建controller.model.store和view文件夹,从名称上就知道他们该放置什么代码了吧.然后创建Applicat ...

  2. 一个PDO类

    下面是在网上借鉴的一个PDO类: <?php class Database{ private $host = DB_HOST; private $user = DB_USER; private ...

  3. Castle ActiveRecord配置中需要注意的地方

    关于Castle 的开发可参考李会军老师的Castle 开发系列文章,里面有关于ActiveRecord学习实践系列和Castle IOC容器系列两个部分,是比较好的教程. 这里主要说明在Castle ...

  4. 股票API

    实时股票数据接口大全 股票数据的获取目前有如下两种方法可以获取:1. http/javascript接口取数据2. web-service接口 1.http/javascript接口取数据 1.1Si ...

  5. KEIL4.12中添加ULINK2的支持

    转载自:http://www.amobbs.com/thread-4767650-1-1.html 如果你用KEIL4.12,但却没有Ulink2下载器,只有早先用的Ulink下载器,那么你按照下面三 ...

  6. JVM 学习笔记

    1.   JAVA类分为三类: 1.1   系统类  (用系统类加载器加载bootstrap ClassLoader) 1.2   扩展类  (用扩展类加载器加载Ext ClassLoader) 1. ...

  7. C#中值参数的使用实例

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 函数的参 ...

  8. 合并多个python list以及合并多个 django QuerySet 的方法

    在用python或者django写一些小工具应用的时候,有可能会遇到合并多个list到一个 list 的情况.单纯从技术角度来说,处理起来没什么难度,能想到的办法很多,但我觉得有一个很简单而且效率比较 ...

  9. Mongodb与关系型数据库

    MongoDB没有固定的关系约束 没有事务, 安全性不高 不一定保证数据的一致性. ACID不符合 NoSQL 放弃了传统关系型数据库严格的事务一致性和范式约束,采用弱一致性模型. http://os ...

  10. TiDB:支持 MySQL 协议的分布式数据库解决方案

    [编者按]TiDB 是国内 PingCAP 团队开发的一个分布式 SQL 数据库.其灵感来自于 Google 的 F1,TiDB 支持包括传统 RDBMS 和 NoSQL 的特性.在国内 ITOM 管 ...