在公升序、無重複元素的陣列中,查詢值為k的元素的陣列下標
#include
#include
#include
using
namespace std;
const
int n =10;
// 在給定陣列中查詢k值所在位置,若不存在則返回-1
// l為二分下界,r為二分上界
intbinarysearch
(int a,
int l,
int r,
int k)
else
if(a[mid]
> k)
else
}return-1
;}intmain()
;scanf
("%d"
,&k)
;// 此處傳入閉區間[0, n-1]
int pos =
binarysearch
(a,0
, n-
1, k)
;printf
("%d\n"
, pos)
;return0;
}
在公升序、有重複元素的陣列中,查詢第乙個大於等於k值的元素的陣列下標
#include
#include
#include
using
namespace std;
const
int n =6;
// 在給定陣列中查詢第乙個大於等於k值的元素的陣列下標
// 若該元素不存在,則返回假設它存在,應該在的位置
// l為二分下界,r為二分上界
intlowerboundl
(int a,
int l,
int r,
int k)
else
}// 此處返回r或l皆可,因為r == l
return l;
}int
main()
;while(~
scanf
("%d"
,&k)
)return0;
}
在公升序、有重複元素的陣列中,查詢最後乙個小於等於k值的元素的陣列下標
#include
#include
#include
using
namespace std;
const
int n =6;
// 在給定陣列中查詢最後乙個小於等於k值的元素的陣列下標
// 若該元素不存在,則返回下標0
// l為二分下界,r為二分上界
intlowerboundr
(int a,
int l,
int r,
int k)
else
}return l;
}int
main()
;while(~
scanf
("%d"
,&k)
)else
}return0;
}
使用模板二和模板三可以在陣列中找到重複元素的區間
在公升序、有重複元素的陣列中,查詢第乙個大於k值的元素的陣列下標
#include
#include
#include
using
namespace std;
const
int n =6;
// 在給定陣列中查詢第乙個大於k值的元素的陣列下標
// 若該元素不存在,則返回假設它存在,應該在的位置
// l為二分下界,r為二分上界
intupperbound
(int a,
int l,
int r,
int k)
else
}return l;
}int
main()
;while(~
scanf
("%d"
,&k)
)return0;
}
待補充… 模版 整數二分
確定乙個區間,使得目標值一定在這個區間內 從題目中找到一種性質 根據上述的性質,具體可以把整數二分劃分為兩大類問題 第一類 目標值是前半段的右端點 將 l,r l,r l,r 分成 l,mid 1 l,mid 1 l,mid 1 和 mi d,r mid,r mid,r 如果mid midmi d處...
C Convoy(整數二分)
這道題我直接好傢伙,方法就是二分時間,看看最短時間符不符合。坑在於 1.需要判斷a i 是否等於0,不然有時候會re!2.需要注意司機無論多少趟只能帶乙個。因為回來的時候也需要乙個人開車。3.左右邊界盡量開到1e12。而且變數以防萬一都開long long,不然會超時。include using n...
二分 整數二分和浮點數二分
一定是單調的才可以二分。找中間點 判斷是否滿足check函式 此函式需要自己根據題意調整,假設紅色區域為滿足check函式,說明mid在紅色區域內,此時要在mid到r之間找,l mid,否則r mid 1。由於此時l mid 所以中間點應為 l r 1 2 中間點mid l r 2 mid l r ...