Files
2025-09-12 18:55:25 +09:00

54 lines
802 B
C++

#include "nr.h"
void NR::hunt(Vec_I_DP &xx, const DP x, int &jlo)
{
int jm,jhi,inc;
bool ascnd;
int n=xx.size();
ascnd=(xx[n-1] >= xx[0]);
if (jlo < 0 || jlo > n-1) {
jlo=-1;
jhi=n;
} else {
inc=1;
if (x >= xx[jlo] == ascnd) {
if (jlo == n-1) return;
jhi=jlo+1;
while (x >= xx[jhi] == ascnd) {
jlo=jhi;
inc += inc;
jhi=jlo+inc;
if (jhi > n-1) {
jhi=n;
break;
}
}
} else {
if (jlo == 0) {
jlo=-1;
return;
}
jhi=jlo--;
while (x < xx[jlo] == ascnd) {
jhi=jlo;
inc <<= 1;
if (inc >= jhi) {
jlo=-1;
break;
}
else jlo=jhi-inc;
}
}
}
while (jhi-jlo != 1) {
jm=(jhi+jlo) >> 1;
if (x >= xx[jm] == ascnd)
jlo=jm;
else
jhi=jm;
}
if (x == xx[n-1]) jlo=n-2;
if (x == xx[0]) jlo=0;
}