线段树水题 #1077 : RMQ问题再临-线段树

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>

using namespace std;
#define maxn 1000000 + 10
#define Lson L, mid, root<<1
#define Rson mid+1, R, root<<1|1
#define INF 0x7ffffff

int Min[maxn<<2], a[maxn];
int num;

void Pushup(int root)
{
    Min[root] = min(Min[root<<1], Min[root<<1|1]);
}

void Bulid(int L, int R, int root)
{
    if(L == R)
    {
        Min[root] = a[++num];
        return ;
    }
    int mid = (L + R) >> 1;
    Bulid(Lson);
    Bulid(Rson);
    Pushup(root);
}

void Update(int q, int val, int L, int R, int root)
{
    if(L == R)
    {
        Min[root] = val;
        return ;
    }
    int mid = (L + R) >> 1;
    if(q <= mid) Update(q, val, Lson);
    else Update(q, val, Rson);
    Pushup(root);
}

int Query(int l, int r, int L, int R, int root)
{
    if(l<=L && r>=R)
    {
        return Min[root];
    }
    int res = INF;
    int mid = (L + R) >> 1;
    if(l <= mid) res = min(res, Query(l, r, Lson));
    if(r > mid) res = min(res, Query(l, r, Rson));
    return res;
}

int main()
{
    int n, q;
    while(~scanf("%d", &n))
    {
        for(int i=1; i<=n; i++)
            scanf("%d", &a[i]);
        num = 0;
        Bulid(1, n, 1);

        scanf("%d", &q);
        int k1, k2, k3;
        while(q--)
        {
            scanf("%d%d%d", &k1, &k2, &k3);
            if(k1) Update(k2, k3, 1, n, 1);
            else printf("%d\n", Query(k2, k3, 1, n, 1));
        }
    }
    return 0;
}

时间: 2024-10-11 13:40:09

线段树水题 #1077 : RMQ问题再临-线段树的相关文章

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

#1077 : RMQ问题再临-线段树 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 上回说到:小Hi给小Ho出了这样一道问题:假设整个货架上从左到右摆放了N种商品,并且依次标号为1到N,每次小Hi都给出一段区间[L, R],小Ho要做的是选出标号在这个区间内的所有商品重量最轻的一种,并且告诉小Hi这个商品的重量.但是在这个过程中,可能会因为其他人的各种行为,对某些位置上的商品的重量产生改变(如更换了其他种类的商品

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

#1077 : RMQ问题再临-线段树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到:小Hi给小Ho出了这样一道问题:假设整个货架上从左到右摆放了N种商品,并且依次标号为1到N,每次小Hi都给出一段区间[L, R],小Ho要做的是选出标号在这个区间内的所有商品重量最轻的一种,并且告诉小Hi这个商品的重量.但是在这个过程中,可能会因为其他人的各种行为,对 某些位置上的商品的重量产生改变(如更换了其他种类的商品). 小Ho提出了两种非常简单的方法,但是都不能

hihoCode r#1077 : RMQ问题再临-线段树

思路:全都已经介绍了.连步骤它都告诉你了.差的只是实现了.两种实现方法:(1)用链表做树(2)用顺序表做树.顺序表的速度更快,因为不用管链的问题.空间谁更省?树是接近平衡的,也就是叶子节点在最下两层,但是如果树深一点,用顺序表就会浪费很多空间,这底层可能比之前存的都要多,但是链表却每个点都要消耗.总的来讲,顺序表更省,即使浪费了一半,也只是一半乘以4个字节,可是链表就每个节点必须浪费8字节了.但是链表却能应对更多情况. 1 #include <bits/stdc++.h> 2 using na

[ACM] Color the ball [线段树水题][数组开大]

Description N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色.但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗? Input 每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <= N).  当N

P2023 [AHOI2009] 维护序列(线段树水题)

题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一段数全部加一个值; (3)询问数列中的一段数的和,由于答案可能很大,你只需输出这个数模P的值. 输入输出格式 输入格式: 第一行两个整数N和P(1≤P≤1000000000).第二行含有N个非负整数,从左到右依次为a1,a2,…,aN, (0≤ai≤1000000000,1≤i≤N).第三行有一个整

acdream B - 郭式树 (水题 卡cin,cout, 卡LL)

题目 输入正好是long long的最大, 但是答案超long long 所以用unsigned, 不能用cin cout否则一定超时: 不能用abs(), abs 只用于整数. unsigned   int   0-4294967295   int   2147483648-2147483647 unsigned long 0-4294967295long   2147483648-2147483647long long的最大值:9223372036854775807long long的最小值

hdu--1251 统计难题(字典树水题)

Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). Input 输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串. 注意:本题只有一组测试数据,处理到文件结束. Output 对于每个提问,给出以该字符

codeforces 339C Xenia and Bit Operations(线段树水题)

转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Xenia and Bit Operations Xenia the beginner programmer has a sequence a, consisting of 2n non-negative integers: a1, a2, ..., a2n. Xenia is currently studying bit operations. To better unders

poj3667【线段树水题】

题意:n个空房间.两种操作:1.选择最小的连续D个房间入住,并输出这连续D个房间的最小标号.2.将某个区间内的房间全部退房. 1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 #define ll long long 5 #define lson l, m, rt<<1 6 #define rson m+1, r, rt<<1|1 7 #define st fir