【题目描述:】

给出一串数以及一个数字 C ,要求计算出所有 A−B=C 的数对的个数。(不同位置的数字一样的数对算不同的数对)

【输入格式:】

第一行包括 2 个非负整数 N 和 C ,中间用空格隔开。

第二行有 N 个整数,中间用空格隔开,作为要求处理的那串数。

【输出格式:】

输出一行,表示该串数中包含的所有满足 A−B=C 的数对的个数。



[算法分析:]

对于前73%的数据,可以直接\(O(N^2)\)枚举

对于100%的数据,可以用二分优化到\(O(nlog_2n)\)

对于一个集合A,a∈A,b∈A

求 a-b=c 的数对的个数,就是满足求出a=b+c的数对个数

先把数据从小到大排序,

枚举集合中的每一个元素b,二分找出第一个等于b+c的元素的位置pos1和第一个大于b+c元素的位置pos2

则[pos1, pos2-1]区间内的每一个元素都能与b构成一个数对

对于此时的b来说,能与其构成数对的方案数为pos2-pos1。



[Code:]

#include<iostream>
#include<cstdio>
#include<algorithm>
#define re register
using namespace std;
typedef long long LL; const int MAXN = 200000 + 1; int n, c, a[MAXN];
LL ans; inline int abs(int x) {
return x>0 ? x : -x;
} //炒鸡快读
inline char gc()
{
static char buff[1000000],*S=buff,*T=buff;
return S==T&&(T=(S=buff)+fread(buff,1,1000000,stdin),S==T)?EOF:*S++;
} inline int read() {
int x = 0; char ch = gc();
while(!isdigit(ch)) ch = gc();
while(isdigit(ch))
x = (x << 3) + (x << 1) + ch - 48, ch = gc();
return x;
} int main() {
n = read(), c = read();
for(re int i=1; i<=n; ++i) a[i] = read();
sort(a + 1, a + n + 1);
for(re int i=1; i<=n; ++i) {
int pos1 = lower_bound(a+1, a+n+1, a[i]+c)-a;
int pos2 = upper_bound(a+1, a+n+1, a[i]+c)-a;
ans += pos2-pos1;
}
printf("%lld\n", ans);
}

【洛谷】【二分查找】P1102 A−B数对的更多相关文章

  1. 洛谷【P1004】方格取数

    浅谈\(DP\):https://www.cnblogs.com/AKMer/p/10437525.html 题目传送门:https://www.luogu.org/problemnew/show/P ...

  2. 洛谷 P1066 2^k进制数

    P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. ( ...

  3. 洛谷P1066 2^k进制数(题解)(递推版)

    https://www.luogu.org/problemnew/show/P1066(题目传送) (题解)https://www.luogu.org/problemnew/solution/P106 ...

  4. 洛谷1066 2^k进制数

    原题链接 大力猜结论竟然猜对了.. 对于一对\(k,w\),我们可以把\(w\)位划分成\(k\)位一段的形式,每一段就是转换成十进制后的一位,这个从题面的解释中应该可以理解. 先不考虑可能多出(即剩 ...

  5. 【洛谷】4317:花神的数论题【数位DP】

    P4317 花神的数论题 题目背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦. 题目描述 话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我 ...

  6. BZOJ4299 & CC FRBSUM:ForbiddenSum & BZOJ4408 & 洛谷4587 & LOJ2174:[FJOI2016]神秘数——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4299 https://www.lydsy.com/JudgeOnline/problem.php? ...

  7. 洛谷P1066 2^k进制数

    P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. ( ...

  8. 洛谷P1976 鸡蛋饼(Catalan数)

    P1976 鸡蛋饼 题目背景 Czyzoiers 都想知道小 x 为什么对鸡蛋饼情有独钟.经过一番逼问,小 x 道出 了实情:因为他喜欢圆. 题目描述 最近小 x 又发现了一个关于圆的有趣的问题:在圆 ...

  9. 洛谷P1722 矩阵 II(Catalan数)

    P1722 矩阵 II 题目背景 usqwedf 改编系列题. 题目描述 如果你在百忙之中抽空看题,请自动跳到第六行. 众所周知,在中国古代算筹中,红为正,黑为负…… 给定一个1*(2n)的矩阵(us ...

  10. 题解 洛谷P1903/BZOJ2120【[国家集训队]数颜色 / 维护队列】

    对于不会树套树.主席树的本蒟蒻,还是老老实实的用莫队做吧.... 其实这题跟普通莫队差不了多远,无非就是有了一个时间,当我们按正常流程排完序后,按照基本的莫队来,做莫队时每次循环对于这一次操作,我们在 ...

随机推荐

  1. [转]微擎人人商城m()函数调用model方法

    本文转自:http://yangjunwei.com/a/3177.html 微擎人人商城p()函数可内部调用任意插件的函数 http://yangjunwei.com/a/3216.html

  2. Layui 获取 radio的值

    var OutInvoiceType = $('#OutInvoiceType input[checked]').val();   就可以获取到了.

  3. 【hibernate】1、Hibernate的一个注解 @Transient

    @Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性.如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic ...

  4. java_分数

    题目内容: 设计一个表示分数的类Fraction.这个类用两个int类型的变量分别表示分子和分母. 这个类的构造函数是: Fraction(int a, int b) 构造一个a/b的分数. 这个类要 ...

  5. Python3 系列之 环境配置篇

    以下所有操作是基于 Windows10 和 Python3.6 来进行的,其它平台和 python 版本请自行百度. 高效使用 Visual Studio Code 系列 环境安装 1.Python ...

  6. 如何在表单中使用Ajax

    1.HTML就是一个简单表单验证,有登录按钮,点击登录会发送Ajax, 这里就是简单如果用户名为:zhouzhiruo,密码为:123456,就是登录成功,否则登录失败 应该在发送请求之前对input ...

  7. HDU5293(SummerTrainingDay13-B Tree DP + 树状数组 + dfs序)

    Tree chain problem Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  8. c++ cmath头文件

    一.前言 c++的一个头文件. 二.常用方法 1. ceil() 定义: c++11 double ceil (double x); float ceil (float x); long double ...

  9. 【读书笔记】iOS-设置应用的硬件需求

    如果你的应用需要一些特定的硬件设备才能运行,你可以在应用的Info.plist文件中添加应用运行所需的硬件列表.如果设备上没有这些硬件的话,你的应用将不会启动. 如图,找到Info.Plist---& ...

  10. jenkins无法获取插件的解决办法

    很多同学在初次配置Jenkins时,是需要安装一些插件的,但是在可选插件和已安装插件里,全都是空白的. 这是为什么呢? 是因为,Jenkins默认的更新站点服务器在国外,但我们身处天朝,所以这个站点已 ...