1. 程式人生 > >51Nod—1174 區間中最大的數 線段樹模版

51Nod—1174 區間中最大的數 線段樹模版

using ace pan struct 註意 truct logs mark mar

在大佬們題解的幫助下算是看懂了線段樹吧。。。在這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 區間中最大的數 線段樹模版