标签:acm
注意要是查找一个数组的话 应该从(-1, n)的范围内查找
r表示出现的最小位置
void solve(int l, int r)///(l,r]
{
while(l + 1 < r)
{
int mid = (l + r) >> 1;
if(a[mid] >= k) r = mid;
else l = mid;
}
cout<<l<<" "<<r<<endl;
}
void solve(int l, int r)///[l,r)
{
while(l + 1< r)
{
int mid = (l + r) >> 1;
if(a[mid] > k) r = mid;
else l = mid;
}
cout<<l<<" "<<r<<endl;
}
///将一个递减数列移位 如 6 5 4 3 2 1 -> 4 3 2 1 6 5
///现在要在移位之后的序列中查找值
///思路: 二分之后 一定有一段是递减 判断查找值是否在该段内 如果在很容易查找 否则继续查找
int solve(int *a, int value, int l, int r)
{
while(l <= r)
{
int mid = (l + r) >> 1;
if(a[mid] == value)
return mid;
else
{
if(a[l] >= a[mid])
{
if(value<=a[l] && value>=a[mid])
r = mid - 1;
else
l = mid + 1;
}
else
{
if(value<=a[mid] && value>=a[r])
l = mid + 1;
else
r = mid - 1;
}
}
}
}
标签:acm
原文地址:http://blog.csdn.net/dojintian/article/details/46604385