zoukankan      html  css  js  c++  java
  • poj3264(简单线段树)

    题目链接:https://vjudge.net/problem/POJ-3264

    题意:线段树简单应用题,区间查询最大值和最小值的差。

    思路:用线段树维护区间的最大值和最小值即可。

    AC代码:

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int maxn=50005;
    
    struct node{
        int l,r,Max,Min;
    }tr[maxn<<2];
    
    int n,Q,a[maxn],ans1,ans2;
    
    void build(int v,int l,int r){
        tr[v].l=l,tr[v].r=r;
        if(l==r){
            tr[v].Max=tr[v].Min=a[l];
            return;
        }
        int mid=(tr[v].l+tr[v].r)>>1;
        build(v<<1,l,mid);
        build(v<<1|1,mid+1,r);
        tr[v].Max=max(tr[v<<1].Max,tr[v<<1|1].Max);
        tr[v].Min=min(tr[v<<1].Min,tr[v<<1|1].Min);
    }
    
    void query(int v,int l,int r){
        if(l<=tr[v].l&&r>=tr[v].r){
            ans1=max(ans1,tr[v].Max);
            ans2=min(ans2,tr[v].Min);
            return;
        }
        int mid=(tr[v].l+tr[v].r)>>1;
        if(l<=mid)
            query(v<<1,l,r);
        if(r>mid)
            query(v<<1|1,l,r);
    }
    
    int main(){
        scanf("%d%d",&n,&Q);
        for(int i=1;i<=n;++i)
            scanf("%d",&a[i]);
        build(1,1,n);
        while(Q--){
            int a,b;
            scanf("%d%d",&a,&b);
            ans1=0,ans2=0x3f3f3f3f;
            query(1,a,b);
            printf("%d
    ",ans1-ans2);
        }
        return 0;
    }
  • 相关阅读:
    qemu-img压缩磁盘操作
    qemu-img压缩磁盘操作
    qemu-img压缩磁盘操作
    qemu-img压缩磁盘操作
    单文件组件
    单文件组件
    单文件组件
    单文件组件
    最适合人工智能开发的5种编程语言优缺点对比
    浅谈WebService开发(一)
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/10848178.html
Copyright © 2011-2022 走看看