hdu5178(二分搜索)

来源:互联网 发布:本地同步软件 编辑:程序博客网 时间:2024/06/15 08:15

本题需要注意的地方:

1.数据量大,需要用到long long 类型。

2.需要使用二分法,否则会超时。

3.注意数据还需要排序。

#include<cstdio>#include<algorithm>//需要注意的是数据量大,用long long 类型typedef long long ll;int n;ll k;ll a[100001];using namespace std;void solve(){    ll ans = 0;    for(int i = 0; i < n; i++){//先遍历每个元素,尝试找到第一个满足条件的元素        ll l, r, mid;        l = i;        r = n - 1;        while(r >= l){            mid = (l + r)/2;            if(a[mid] - a[i] > k){                r = mid - 1;//            }            else{                l = mid + 1;            }        }        ans += r - i;    }    printf("%I64d\n", ans);}int main(){    int t;    scanf("%d", &t);    while(t--){        scanf("%I64d%I64d", &n, &k);        for(int i = 0; i < n; i++){            scanf("%I64d", &a[i]);        }        sort(a, a + n);        solve();    }}


原创粉丝点击