B1030 完美数列 (25 分)

这是一道二分法的题目,许久不使用二分法,感觉有点生疏。

#include
using namespace std;
const int MAXN=100000+5;
vector vec;
int N,p;
int binarySearch(int i,long long x){
    if(vec[N-1]<=x) return N;
    int l=i+1,r=N-1,mid;
    while(l

注意点:

  1. vec[i] x p,已经超出了int的范围,用long long。
  2. 二分的前提是先排序。
  3. 通过指针l与指针r不断地缩小搜索范围,指针mid当中介,当lr相等时,查询结束。

以下,用c++提供的upper_bound函数解决,内部也采用二分实现。

#include
using namespace std;
vector vec;
int N,p;
int main(){
    scanf("%d %d",&N,&p);
    for(int i=0;i

你可能感兴趣的:(B1030 完美数列 (25 分))