`
huyifan951124
  • 浏览: 82746 次
社区版块
存档分类
最新评论

hdu5443 线段树求区间最大

 
阅读更多

题目大意:给你一些水源,让你求给定区间当中的最大值。

算法思想:线段树求区间最大。

#include<iostream>
#include<cstdio>
using namespace std;

typedef struct Node
{
    int value;
    int l;
    int r;

};
Node tree[1050*4];
int a[10050];
void build_tree(int v,int l,int r)
{
    tree[v].l=l;
    tree[v].r=r;
    if(l==r)
    {
        tree[v].value=a[l];
        return;
    }
    else
    {
        int mid=(l+r)/2;
        build_tree(v*2,l,mid);
        build_tree(v*2+1,mid+1,r);
        tree[v].value=max(tree[v*2].value,tree[v*2+1].value);
    }
}
int query(int v,int l,int r)
{
    if(tree[v].l==l&&tree[v].r==r)
    {
        return tree[v].value;
    }

    int mid=(tree[v].l+tree[v].r)/2;
    if(r<=mid)
    {
        query(v*2,l,r);
    }
    else
    {
        if(l>mid)
            query(v*2+1,l,r);
        else
        {
            int max1=query(v*2,l,mid);
            int max2=query(v*2+1,mid+1,r);
            return max(max1,max2);
        }
    }


}
void update(int v,int add,int p)
{
    if(tree[v].l==tree[v].r)
    {
        tree[v].value+=add;
        return;
    }
    int mid=(tree[v].l+tree[v].r)/2;

    if(p<=mid)
        update(v*2,add,p);
    else
        update(v*2+1,add,p);
    tree[v].value=tree[v*2].value+tree[v*2+1].value;


}
int t,n,q;
int main()
{
    scanf("%d",&t);
    while(t--)
    {

        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
        }
        build_tree(1,1,n);
        scanf("%d",&q);
        int l,r;
        for(int i=1;i<=q;i++)
        {
            scanf("%d%d",&l,&r);
            int ans=query(1,l,r);
            printf("%d\n",ans);
        }

    }

    return 0;

}

 

1
1
分享到:
评论

相关推荐

    hdu 1166线段树

    标题与描述均提到了“hdu 1166线段树”,这表明文章的核心是关于线段树在解决特定问题中的应用。线段树是一种数据结构,主要用于处理区间查询和更新操作,尤其是在大规模数据集上。在本例中,通过分析给定的部分代码...

    ACM hdu 线段树题目+源代码

    线段树的主要应用是解决区间问题,例如区间和、区间最大值、区间最小值等。线段树可以将这些问题的时间复杂度从 O(n) 降低到 O(logn)。 Hdu 2871 Memory Control Hdu 2871 Memory Control 是一个典型的线段树...

    线段树完整版

    线段树是一种二叉树数据结构,常用于处理区间查询或区间更新的问题。它将一个线性序列分割成多个不连续的段,每一个节点代表一个区间,并且通过递归的方式将这些区间进一步分割为更小的子区间,直到每个叶子节点代表...

    线段树入门学习(兼解HDU1754)

    线段树是一种数据结构,主要用于高效地处理区间查询与修改问题。在计算机科学中,它在动态规划、算法竞赛等领域有着广泛的应用。这篇博客“线段树入门学习(兼解HDU1754)”旨在帮助初学者理解线段树的基本概念,并...

    线段树题目

    这是一个经典的线段树应用问题,通过线段树维护每个区间的最大值。在查询区间最大值时,只需遍历对应的线段树节点即可快速得到结果。 - **HDU 1166**:求区间和。同样也是经典的应用场景,线段树维护每个区间的和。...

    HH神总结的线段树专辑-超经典的

    - **实现**:构建线段树时,除了支持区间最大值的查询外,还需要支持单点替换操作。 通过以上分析可以看出,线段树作为一种高效的数据结构,在处理区间相关问题时具有很强的实用性。同时,随着作者经验的增长和...

    【hdu5306】Gorgeous Sequence 线段树区间最值操作-附件资源

    【hdu5306】Gorgeous Sequence 线段树区间最值操作-附件资源

    hdu 3333 turing tree 解题报告

    在这个问题中,线段树的每个节点存储的信息不仅仅是区间内的和,而是区间内不同数字的和。线段树的每个节点包含以下信息: 1. `a` 和 `b`:表示节点覆盖的区间左边界和右边界。 2. `value`:表示在区间 `[a, b]` 内...

    hdu 300+ AC 代码

    线段树在处理动态区间问题时非常有效,如在数组上进行区间加法、区间求和等操作。理解和熟练运用线段树是解决复杂数据结构题目的关键。 3. **字符串处理**:字符串是编程中常见的数据类型,用于处理文本信息。字符...

    hdu ACM代码 每种算法都有分类

    6. **数据结构**:线段树、斐波那契堆、平衡树(AVL、红黑树)、字典树(Trie)、并查集等,这些高级数据结构可以高效地解决区间查询、维护、集合操作等问题。 7. **几何算法**:二维和三维几何问题,如点线面的...

    个人训练实用知识库分享知识分享

    通过在线段树中进行查询和更新,我们可以解决区间问题。 十一、博弈、树形dp 在多个题目中,我们学习了博弈、树形dp的应用。博弈、树形dp是一种动态规划算法,用于解决游戏相关的问题。通过定义状态转移方程式,...

    ACM知识点.docx

    在该文件中,线段树是一个典型的线段树问题,要求使用线段树来解决区间查询问题。解题时需要熟悉线段树的定义和性质,并了解其应用场景。 11. KMP(2) : KMP(2) 是一个典型的 KMP 算法问题,要求使用 KMP 算法来...

    树状数组(Binary Indexed Tree)

    相较于其他数据结构如线段树,树状数组在实现上更为简洁,并且在实际应用中往往具有较好的常数因子。 - **查询和修改复杂度**:树状数组支持在`O(log n)`时间内完成区间查询和单点更新操作。 - **应用场景**:树状...

    总模板_lsy_WF[2015-04-16]1

    【总模板_lsy_WF[2015-04-16]1...RMQ常用于数据结构优化,例如线段树、斐波那契堆等,以快速响应区间查询。 综上所述,这份模板涵盖了ACM-ICPC竞赛中图论部分的重要算法,对于理解和解决实际问题有着重要的指导价值。

    ACM算法讲解 附源码

    而`hdoj`可能指的是HDU(杭州电子科技大学)在线判题系统的题目,这些题目涵盖了各种ACM算法,可以作为练习和检验理解的平台。 总之,这个资源包是学习和提升ACM算法技能的理想材料,通过深入学习和实践,你可以...

Global site tag (gtag.js) - Google Analytics