51Nod—1174 区间中最大的数 线段树模版

Posted ナイト

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51Nod—1174 区间中最大的数 线段树模版相关的知识,希望对你有一定的参考价值。

在大佬们题解的帮助下算是看懂了线段树吧。。。在这mark下防一手转头就忘。

#include<iostream>
#include<stdio.h>
using namespace std;
struct ki
{
    int m,l,r;
}tree[40005];
int ans=-1,a[10005];
void build(int n,int l,int r)
{
    tree[n].l=l;
    tree[n].r=r;
    if(l==r)
    {
        tree[n].m=a[l];return;
    }
    else
    {
        build(n*2,l,(l+r)/2);
        build(n*2+1,(l+r)/2+1,r);
        tree[n].m=tree[n*2].m>tree[n*2+1].m?tree[n*2].m:tree[n*2+1].m;
    }
}
void find(int n,int a,int b)
{
    if(a<=tree[n].l&&b>=tree[n].r) ans=tree[n].m>ans?tree[n].m:ans;//注意a,b,r,l的关系!!!
    else if(a>tree[n].r||b<tree[n].l) return;
    else 
    {
        find(n*2,a,b);
        find(n*2+1,a,b);
    }
}
int main()
{
    int n,m,i,j,r,l;
    scanf("%d",&n);
    for(i=1;i<=n;i++) scanf("%d",&a[i]);
    build(1,1,n);
    scanf("%d",&m);
    while(m--)
    {
        scanf("%d%d",&l,&r);
        ans=-1;
        l++;r++;
        find(1,l,r);
        printf("%d\n",ans);
    }
}

哼叽~

以上是关于51Nod—1174 区间中最大的数 线段树模版的主要内容,如果未能解决你的问题,请参考以下文章

51nod 1174 1174 区间中最大的数

51nod 1174 区间中最大的数

51Nod 1174 区间中最大的数

51Nod 1174 区间中最大的数

51Nod 1174 区间中最大的数(RMQ)

51NOD1174 区间最大数 && RMQ问题(ST算法)