《信息学奥赛一本通》分治算法 找数 例题
生活随笔
收集整理的這篇文章主要介紹了
《信息学奥赛一本通》分治算法 找数 例题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【描述】
給一個長度為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语言实现飞机大战