二分查找:
int bisearch(int *a,int x,int y,int v){ int m; while(x<y){ m=x+(y-x)/2; if(a[m]==v) return m; else if(a[m]>v) y=m; else x=m+1; } return -1; }
二分查找求下界:
int lower_bound(int *a,int x,int y,int v){ int m; while(x<y){ m=x+(y-x)/2; if(a[m]>=v) y=m; else x=m+1; } return x; }
二分查找求上界:
int upper_bound(int *a,int x,int y,int v){ int m; while(x<y){ m=x+(y-x)/2; if(a[m]<=v) x=m+1; else y=m; } return m; }
浙公网安备 33010602011771号