zoukankan      html  css  js  c++  java
  • 题目1544:数字序列区间最小值

    题目1544:数字序列区间最小值

    时间限制:1 秒

    内存限制:128 兆

    特殊判题:

    题目描述:

    给定一个数字序列,查询任意给定区间内数字的最小值。

    输入:

    输入包含多组测试用例,每组测试用例的开头为一个整数n(1<=n<=100000),代表数字序列的长度。
    接下去一行给出n个数字,代表数字序列。数字在int范围内。
    下一行为一个整数t(1<=t<=10000),代表查询的次数。
    最后t行,每行给出一个查询,由两个整数表示l、r(1<=l<=r<=n)。

    输出:

    对于每个查询,输出区间[l,r]内的最小值。

    样例输入:
    5
    3 2 1 4 3
    3
    1 3
    2 4
    4 5
    样例输出:
    1
    1
    3
    区间最值,线段树入门最基本的试题。
    #include <iostream>
    #include <stdio.h>
    #include <queue>
    #include <stdio.h>
    #include <string.h>
    #include <vector>
    #include <queue>
    #include <set>
    #include <algorithm>
    #include <map>
    #include <math.h>
    #define Max(a,b) ((a)>(b)?(a):(b))
    #define Min(a,b) ((a)<(b)?(a):(b))
    using namespace std ;
    typedef long long LL ;
    const int N_size=100008 ;
    int N ,M ;
    struct Seg{
        int left ;
        int right ;
        int min_num ;
    }seg[N_size*3];  //二叉树性质,注意这个地方
    int num[N_size] ;
    void make_tree(int L ,int R ,int id){
         seg[id].left=L ;
         seg[id].right=R ;
         if(L==R){
              seg[id].min_num=num[L] ;
              return  ;
         }
         int mid=(L+R)>>1 ;
         make_tree(L,mid,id*2) ;
         make_tree(mid+1,R,id*2+1) ;
         seg[id].min_num=Min(seg[id*2].min_num,seg[id*2+1].min_num) ;
    }
    int query(int L ,int R ,int id){
         if(L<=seg[id].left&&seg[id].right<=R)
               return  seg[id].min_num ;
         int mid=(seg[id].left+seg[id].right)>>1  ;
         if(R<=mid)
              return query(L,R,id*2) ;
         else if(mid<L)
              return  query(L,R,id*2+1) ;
         else
              return Min(query(L,mid,id*2),query(mid+1,R,id*2+1)) ;
    }
    int main(){
       int L ,R ;
       while(scanf("%d",&N)!=EOF){
            for(int i=1;i<=N;i++)
                scanf("%d",&num[i]) ;
            make_tree(1,N,1) ;
            scanf("%d",&M) ;
            while(M--){
                scanf("%d%d",&L,&R)  ;
                if(L>R)
                    swap(L,R) ;
                printf("%d
    ",query(L,R,1)) ;
            }
       }
       return 0 ;
    }
    

      

  • 相关阅读:
    支持向量机SVM知识点概括
    决策树知识点概括
    HDU 3081 Marriage Match II
    HDU 3572 Task Schedule
    HDU 4888 Redraw Beautiful Drawings
    Poj 2728 Desert King
    HDU 3926 Hand in Hand
    HDU 1598 find the most comfortable road
    HDU 4393 Throw nails
    POJ 1486 Sorting Slides
  • 原文地址:https://www.cnblogs.com/liyangtianmen/p/3354982.html
Copyright © 2011-2022 走看看