zoukankan      html  css  js  c++  java
  • Lightoj1093 【线段树】

    题意:
    给出n个数,然后对于D区间的数求一个最大差值
    思路:

    区间最大最小。。。我居然没想到线段树。。。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int N=1e5+10;
    
    struct SegT{
        int left;
        int right;
        int mid;
        int tmin,tmax;
    };
    SegT q[N*4];
    int n;
    
    void Build(int num,int L ,int R)
    {
        int mid;
        q[num].left=L;
        q[num].right=R;
        mid=(L+R)/2;
        if(L==R)
        {
            scanf("%d",&q[num].tmax);
            q[num].tmin=q[num].tmax;
            return;
        }
        Build(2*num,L,mid);
        Build(2*num+1,mid+1,R);
        q[num].tmin=min(q[2*num].tmin,q[2*num+1].tmin);
        q[num].tmax=max(q[2*num].tmax,q[2*num+1].tmax);
    }
    
    int query_min(int num,int s, int t)
    {
        if(q[num].left>=s&&q[num].right<=t)
            return q[num].tmin;
        int mid=(q[num].left+q[num].right)/2;
        if(mid>=t)
            return query_min(2*num,s,t);
        else if(mid<s)
            return query_min(2*num+1,s,t);
        else
            return min(query_min(2*num,s,mid),query_min(2*num+1,mid+1,t));
    }
    
    int query_max(int num,int s, int t)
    {
        if(q[num].left>=s&&q[num].right<=t)
            return q[num].tmax;
        int mid=(q[num].left+q[num].right)/2;
        if(mid>=t)
            return query_max(2*num,s,t);
        else if(mid<s)
            return query_max(2*num+1,s,t);
        else
            return max(query_max(2*num,s,mid),query_max(2*num+1,mid+1,t));
    }
    
    int main()
    {
        int T,cas=1,d;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&d);
            Build(1,1,n);
            int ans=0;
            for(int i=1;i<=(n-d+1);i++)
            {
                ans=max(ans,abs(query_max(1,i,i+d-1)-query_min(1,i,i+d-1)));
            }
            printf("Case %d: %d
    ",cas++,ans);
        }
        return 0;
    }
    


  • 相关阅读:
    04-增删改查
    03-编写dao实现类方式
    02-基于注解的入门案例
    .net core api 图片上传与加载
    笔记一、数据库初始化 约定
    .net core MVC中级教程(四)
    .net core MVC中级教程(三)
    Windows 盘符映射
    c# 队列和堆栈
    isValidNode
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777540.html
Copyright © 2011-2022 走看看