• P1816忠诚


    这是一个区间查询最值的问题,用线段树来做。

    建树的时候,这里不是求和,应该是e[k].w=min(e[k*2].w,e[k*2+1].w),所以这里要注意以下,其次是查询的时候,因为本题不用让我们修改,所以我们不需要懒标记,然后我们再去区间查询最大值

    1.不要忘了写build()

    2.练好看范围的能力

    代码

    #include<bits/stdc++.h>
    #define maxn 100005
    #define maxm 100005
    #define INF 9999999
    using namespace std;
    int n,m;
    int a,b;
    struct node{
        int l,r;
        int f,w; 
    }e[maxn];
    int s[maxn],ans[maxn];
    int minn;
    inline void build(int ll,int rr,int k){
        e[k].l=ll,e[k].r =rr;
        if(ll==rr){
            e[k].w=s[ll];
            return;
        }
        int m=(e[k].l+e[k].r)/2;
        build(ll,m,k*2);
        build(m+1,rr,k*2+1);
        e[k].w=min(e[k*2].w,e[k*2+1].w);
    }
    inline void query(int k){
        if(e[k].l<=a&&e[k].r>=b){
            return e[k].w;
        }
        int m=(e[k].l+e[k].r)/2;
        if(a<=m) minn=min(minn,query(k*2));
        if(b>m) minn=min(minn,query(k*2+1));
        return minn;
    }
    
    
    int main(){
        cin>>n;
        cin>>m;
        for(int i=1;i<=n;i++){
            cin>>s[i];
        }
        build(1,n,1);
        for(int i=1;i<=m;i++){
            cin>>a>>b;
            minn=INF;        
            minn=query(1);
            ans[i]=minn;
        }
        for(int i=1;i<=m;i++){
            cout<<ans[i]<<" ";
        }
        return 0;
    }
  • 相关阅读:
    Live2D 看板娘
    Live2D 看板娘
    python框架☞Flask
    Python框架☞Django
    Python ORM框架之SQLALchemy
    HTTP1.0 HTTP 1.1 HTTP 2.0主要区别
    【F12】修改 DevTools的主题
    【F12】网络面板
    【正在等待可用套接字】解决方法
    nginx反向代理压测问题记录
  • 原文地址:https://www.cnblogs.com/china-mjr/p/11745125.html
Copyright © 2020-2023  润新知