优美的二分模型
在序列中寻找大于等于x的最小值
int findl(int x) { int l = 1, r = n + 1; while(l < r) { int mid = l + r >> 1; if(a[mid].pos >= x) r = mid; else l = mid + 1; } //mid取不到r,而r一开始取n+1有利于查找正确答案 }
在序列中寻找小于等于x的最大值
int findr(int x) { int l = 0, r = n; while(l < r) { int mid = l + r + 1 >> 1; if(a[mid].pos<= x) l = mid; else r = mid - 1; } //原理同上 }