HDU 5178 pairs(双指针)

HDU 5178 pairs(双指针)

Hdu 5178

解法:因为要求的是绝对值小于等于k,因此数字的序号关系并不重要,那么排序后使用双指针即可解决这个问题。

#include<queue>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
inline int read()
{
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}
const int N=2e5+10;
int a[N];
int main()
{
    int T=read();
    while(T--){
        int n=read(),m=read();
        for(int i=0;i<n;i++) a[i]=read();
        sort(a,a+n);
        int l=0,r=0,cnt=0;
        ll ans=0;
        while(l<=r&&r<n){
            for(;l<r&&abs(a[r]-a[l])>m;l++);
            ans+=r-l;
            r++;
        }
        printf("%lld\n",ans);
    }
    return 0;
}

posted @ 2017-04-13 17:03  江南何采莲  阅读(189)  评论(0编辑  收藏  举报