二分总结-.-

来源:互联网 发布:守纪律讲规矩知敬畏 编辑:程序博客网 时间:2024/05/22 11:53

弄了一天的二分模板 orz

// 查找第一个相等的元素int find(int n, int key,int *a) {int l=0,r=n-1;while(l<=r){int mid=(l+r)/2;if(a[mid]>=key) r=mid-1;else if(a[mid]<key) l=mid+1;}if(l<n&&a[l]==key)return l;return -1;}

// 查找最后一个相等的元素int find(int n, int key,int *a) {int l=0,r=n-1;while(l<=r){int mid=(l+r)/2;if(a[mid]<=key) l=mid+1;else if(a[mid]>key) r=mid-1;}if(r>=0&&a[r]==key)return r;return -1;}
// 查找最后一个等于或者小于key的元素int find(int n, int key,int *a) {int l=0,r=n-1;while(l<=r){int mid=(l+r)/2;if(a[mid]<=key) l=mid+1;else if(a[mid]>key) r=mid-1;}return r;}
// 查找最后一个小于key的元素int find(int n, int key,int *a) {int l=0,r=n-1;while(l<=r){int mid=(l+r)/2;if(a[mid]>=key) r=mid-1;else if(a[mid]<key) l=mid+1;}return r;}
// 查找第一个等于或者大于key的元素int find(int n, int key,int *a) {int l=0,r=n-1;while(l<=r){int mid=(l+r)/2;if(a[mid]>=key) r=mid-1;else if(a[mid]<key) l=mid+1;}return l;}
// 查找第一个大于key的元素
int find(int n, int key,int *a) {int l=0,r=n-1;while(l<=r){int mid=(l+r)/2;if(a[mid]<=key) l=mid+1;else if(a[mid]>key) r=mid-1;}return l;}

原创粉丝点击