二分方法 但是T了
查看原帖
二分方法 但是T了
1270328
wht59111570楼主2024/7/22 10:53
#include<bits/stdc++.h>
using namespace std;

#define N 1000001
int n,m;
int a[N];
int q;
int l,r,c;
int ans;
bool Cmp(int x,int y)
{return x<=y;}
int Erfen(int x)
{
    int res;
    while(l<r)
    {
        int mid=l+r>>1;
        if(a[mid]==x) r=mid;  
        else if(a[mid]>x) r=mid;
        else if(a[mid]<x) l=mid+1;
    }
    res=l;
    if(a[l]!=x) return 0;
    l=1;
    r=n+1;
    while(l<r)
    {
        int mid=l+r>>1;
        if(a[mid]==x) l=mid+1;
        else if(a[mid]>x) r=mid;
        else if(a[mid]<x) l=mid+1;
    }
    if(a[l-1]!=x) return 0;
    return l-res;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    cin>>n>>c;
    for(int i=1;i<=n;i++)
    cin>>a[i];
    sort(a+1,a+1+n,Cmp);
    for(int i=1;i<=n;i++)
    {
        int q=a[i]+c;
        l=1;
        r=n+1;
        ans+=Erfen(q);
    }
    cout<<ans;
    return 0;
}
2024/7/22 10:53
加载中...