已红温,谁来看看哇
查看原帖
已红温,谁来看看哇
1477468
twobunny13楼主2024/11/11 01:01

using namespace std;

typedef long long LL;

int main(int argc, char **argv)

{

    LL N, C, x = 0, n, mid, MID;

    cin >> N >> C;

    LL s[N];

    for (LL i = 0; i < N; i++)

    {

        cin >> s[i];
    }

    sort(s, s + N);

    for (LL i = 0; i < N; i++)

    {

        n = s[i] + C;
        int l = 0, r = N - 1;

        while (l < r)
        {
            mid = (l + r) / 2;
            if (s[mid] >= n)
                r = mid;
            if (s[mid] < n)
                l = mid + 1;
        }
        int k = 0, p = N - 1;
        while (k < p)
        {
            MID = ceil((k + p) * 1.0 / 2);
            if (s[MID] <= n)
                k = MID;
            if (s[MID] > n)
                p = MID - 1;
        }
        if (s[k] == n)
            k++; // 实际为最后数字在的位置,为满足upper_bound要求,都要再加一

        x += (k - l);
    }

    cout << x;

    return 0;
}```
2024/11/11 01:01
加载中...