題目:
火車站的列車排程鐵軌的結構如上圖所示。
兩端分別是一條入口(entrance)軌道和一條出口(exit)軌道,它們之間有n條平行的軌道。每趟列車從入口可以選擇任意一條軌道進入,最後從出口離開。在圖中有9趟列車,在入口處按照的順序排隊等待進入。如果要求它們必須按序號遞減的順序從出口離開,則至少需要多少條平行鐵軌用於排程?
輸出:在一行中輸出可以將輸入的列車按序號遞減的順序調離所需要的最少的鐵軌條數。
輸入樣例:
98 4 2 5 3 9 1 6 7
輸出樣例:
4思路:
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
set<
int> s;
intmain()
else
}printf
("%d\n"
,s.size());}
介紹一下兩個函式:
1.在普通有序陣列中:
upper_bound(begin,end,num)
begin:開始查詢的下標
end:結束查詢的下標
num:比對元素
作用:這個函式是在已經排好序的陣列 中,利用二分搜尋來找出指向滿足a[i] > num的 a陣列 的最小的指標(返回的是位址)。
lower_bound(begin,end,num)
begin:開始查詢的下標
end:結束查詢的下標
num:比對元素
作用:這個函式是在已經排好序的陣列 a 中,利用二分搜尋來找出指向滿足a[i] >= num的 a的陣列 的最小的指標。
查詢下標:
t=upper_bound(a,a+4,num)-a;
t=lower_bound(a,a+4,num)-a;
2.在set中
set<
int>
::iterator it;
//定義迭送器
int x=6;
it=s.
lower_bound
(x);
//查詢第乙個》=x的元素的迭送器
二分查詢set,返回**第乙個大於等於x**的數,如果沒找到,返回末尾的迭代器位置(**s.lower_bound(num)==s.end()**此時沒有找到num元素)
set<
int>
::iterator it;
//定義迭送器
int x=6;
it=s.
upper_bound
(x);
//查詢第乙個》x的元素的迭送器
二分查詢set,返回**第乙個大於x**的數,如果沒找到,返回末尾的迭代器位置(**s.upper_bound(num)==s.end()**此時沒有找到num元素)
(此外其實在vector和其他stl容器中也可以用這兩個函式。) 第三章 二分查詢
今天要學習的是二分查詢。1.介紹 二分查詢跟歸併與快排一樣都採用了分治思想,它是在乙個有序陣列中查詢資料。2.方法 將乙個陣列的下標除以2,得到的是中間數,中間數與要查詢的資料進行對比 注意這裡是有序陣列 如果要查詢的資料比中間數大就在中間數的右邊,如果小就在左邊。一直迴圈,直到找到要查詢的資料或者...
第三章 set注入
setter注入 dao層 dao 層介面 publicinte cefruitdao 實現類 publicclassfruitdaoimplimplementsfruitdao 服務層介面 publicinte cefruitservice 服務層實現類 publicclassfruitservi...
第三章 set注入
setter注入 dao層 dao層介面 public inte ce fruitdao 實現類 public class fruitdaoimpl implements fruitdao 服務層介面 public inte ce fruitservice 服務層實現類 public class f...