第三个点超时,应该怎么改?
查看原帖
第三个点超时,应该怎么改?
1128181
Evolution333楼主2023/11/24 22:15
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 2e5+10;
long long  a[N];

long long  n,c,cnt;

int search(int l, int r, long long x)
{
    while(l<r)
    {
        int mid = l+r>>1;
        if(a[mid] >= x) r = mid;
        else l = mid + 1;
    }
    return l;
}

int main()
{
    scanf("%d%d",&n,&c);

    for(int i=0;i<n;i++) scanf("%d",&a[i]);

    sort(a,a+n);

    for(int i=0;i<n;i++)
    {
        long long  t = c + a[i];
        if(t == a[search(0,n-1,t)])
        {
            cnt++;
            int j = search(0,n-1,t);
            while (a[j+1] == a[j])
            {
                cnt++;
                j++;
            }
        }
    }

    printf("%d",cnt);


    return 0;
}
2023/11/24 22:15
加载中...