《信息学奥赛一本通》分治算法 找数 例题
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                《信息学奥赛一本通》分治算法  找数  例题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                【描述】
給一個長度為n的單調遞增的正整數序列,即序列中每一個數都比前一個數大。
 有m個詢問,每次詢問一個x,問序列中最后一個小于等于x的數是什么?
【輸入】
第一行兩個整數n,m。
 接下來一行n個數,表示這個序列。
 接下來m行每行一個數,表示一個詢問。
【輸出】
輸出共m行,表示序列中最后一個小于等于x的數是什么。
 假如沒有,則輸出-1.
【樣例輸入】
5 3
 1 2 3 4 6
 5
 1
 3
【樣例輸出】
4
 1
 3
【分析】
用left表示序列的左邊界,用right表示序列的右邊界,[left,right]組成序列。
 一開始left=1,right=n。序列已經按照升序排好,保證了二分的有序性。
 二分的步驟:
 1.去序列區間的中間值mid=(left+right)/2;
 2.判斷mid與x的關系,如果a[mid]>x,所以區間[mid,right]直接排除,修改right=mid-1;
 如果a[mid]<x,所以區間[left,mid]直接排除,修改right=mid+1;
 3.重復執行二分操作知道left>right。
 最終循環結束時一定是left=right+1,所以最后的結果為right指向的值。
總結
以上是生活随笔為你收集整理的《信息学奥赛一本通》分治算法 找数 例题的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 《信息学奥赛一本通》 高精度减法。输入两
 - 下一篇: python语言实现飞机大战