zoukankan      html  css  js  c++  java
  • 基础之基础线段树

    这是关于线段树的某一实际应用。

    其中涉及到,线段树的建立,线段树的查询(此题用的是查询之后的更新),当然正规全面的线段树还有修改等操作,我仅仅是万分之一吧。

    转载一位大佬的博客 :http://blog.csdn.net/zearot/article/details/48299459

    本题大意是不断查询一个数组中一段连续长度的最大值与最小值的差,并输出。

    下面为我的代码,比较拙劣。

    查询操作,需要不断更新nowmax和nowmin的值,这样记录下来。

    其余的都是一些小小的细节。

    #include<iostream>
    #define maxn 1000
    typedef struct lnode{
        int max;
        int min;
    }lnode;
    lnode node[maxn<<2];
    int A[maxn],n;
    int nowmax=-1,nowmin=100007; 
    using namespace std;
    int qumax(int a,int b)
    {
        return a>b?a:b;
    }
    int qumin(int a,int b)
    {
        return a>b?b:a; 
    } 
    void pushup(int rt)
    {
        node[rt].max=qumax(node[rt<<1].max,node[rt<<1|1].max);
        node[rt].min=qumin(node[rt<<1].min,node[rt<<1|1].min);
    }
    void build(int l,int r,int rt)
    {
        if(l==r){
            node[rt].max=A[l];
            node[rt].min=A[l];
            return ;
        }
        int m=(l+r)>>1;
        build(l,m,rt<<1);
        build(m+1,r,rt<<1|1);
        pushup(rt);
    }
    void query(int L,int R,int l,int r,int rt)
    {
        if(L<=l&&r<=R){
            nowmax=qumax(node[rt].max,nowmax);
            nowmin=qumin(node[rt].min,nowmin); 
            return; 
        }    
        int m=(l+r)>>1;
        if(L<=m) query(L,R,l,m,rt<<1);
        if(R>m) query(L,R,m+1,r,rt<<1|1);
    }
    int main()
    {
        int n1,m1; 
        while(cin>>n1>>m1){
            for(int i=1;i<=n1;++i){
                cin>>A[i];
            }
            build(1,n1,1);
            for(int i=0;i<m1;++i){
                int x, y;
                cin>>x;cin>>y;
                query(x,y,1,n1,1);
                cout<<nowmax-nowmin<<endl;
                nowmax=-1,nowmin=1e7;
            } 
        }
        return 0;
    }
  • 相关阅读:
    Django知识总结(一)
    Django知识总结(二)
    Django知识总结(三)
    机器学习领域主要术语的英文表达
    Python的进程与线程--思维导图
    MySQL数据库--思维导图
    5.18 每日小三练
    5.14 每日小三练
    5.12 每日小三练
    5.9 每日小三练
  • 原文地址:https://www.cnblogs.com/tacore/p/9863818.html
Copyright © 2011-2022 走看看