ホームに戻る
2分探索

// 最小値探索(離散バージョン)
long long low = 0;
long long high = 1000000000;

while(low < high){
  long long mid = (high + low) >> 1;

  if(check(mid) == 1){
    high = mid;
  }
  else{
    low = mid + 1;
  }
}

cout << low << endl;

// 最大値探索(離散バージョン)
long long low = 0;
long long high = 1000000000;

while(low < high){
  long long mid = (high + low + 1) >> 1;

  if(check(mid) == 1){
    low = mid;
  }
  else{
    high = mid - 1;
  }
}

cout << low << endl;

// 最小値探索(連続バージョン)
double low = 0.0;
double high = 10000.0;

for(int i = 0; i < 200; i++){
  double mid = (low + high) / 2;
  if(check(mid)){
    high = mid;
  }
  else{
    low = mid;
  }
}

cout << high << endl;

// 最大値探索(連続バージョン)
double low = 0.0;
double high = 10000.0;

for(int i = 0; i < 200; i++){
  double mid = (low + high) / 2;
  if(check(mid)){
    low = mid;
  }
  else{
    high = mid;
  }
}

cout << high << endl;

inserted by FC2 system