pairs

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Problem Description
John has n points on the X axis, and their coordinates are (x[i],0),(i=0,1,2,…,n−1). He wants to know how many pairs<a,b> that |x[b]−x[a]|≤k.(a<b)
Input
The first line contains a single integer T (about 5), indicating the number of cases.
Each test case begins with two integers n,k(1≤n≤100000,1≤k≤109).
Next n lines contain an integer x[i](−109≤x[i]≤109), means the X coordinates.
Output
For each case, output an integer means how many pairs<a,b> that |x[b]−x[a]|≤k.
Sample Input
2 5 5 -100 0 100 101 102 5 300 -100 0 100 101 102
Sample Output
3 10
先讲讲我超时的思路:对于每个数xi,分别加入xi,xi+k,xi-k到数组中去,将其离散化之后就可以转化到树状数组的问题上去了。|xb-xa|<=k,所以xb-k<=xa<=xb+k,即只需要找到在这个区间范围内的个数。这也是为什么之前要加入xi,xi+k,xi-k。但这种想法居然超时了,无语。。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<set>
#include<map>
using namespace std;const int maxn = 100005;
int n,k,cnt,X[maxn];
int tree[maxn<<1];
set<int> Set;
map<int,int> Map;int lowbit(int x)
{return x & -x;
}void update(int x,int c)
{while(x <= cnt){tree[x] += c;x += lowbit(x);}
}int getsum(int x)
{int sum = 0;while(x > 0){sum += tree[x];x -= lowbit(x);}return sum;
}int main()
{int t;__int64 ans;scanf("%d",&t);while(t--){scanf("%d%d",&n,&k);   Set.clear();Map.clear();for(int i = 1; i <= n; i++){scanf("%d",&X[i]);Set.insert(X[i]);Set.insert(X[i]+k);Set.insert(X[i]-k);}ans = cnt = 0;memset(tree,0,sizeof(tree));for(set<int>::iterator it = Set.begin(); it != Set.end(); it++)Map[*it] = ++cnt;for(int i = 1; i <= n; i++){ans += getsum(Map[X[i]+k]) - getsum(Map[X[i]-k]-1);update(Map[X[i]],1);}printf("%I64d\n",ans);}return 0;
}

实在想不出什么优化的方法,参考了别人的思路,尺取法即可。仔细想想,确实是没问题的,因为是取绝对值的,所以谁前谁后都是不会有影响的。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;const int maxn = 100005;
int n,k,X[maxn];int main()
{int t;scanf("%d",&t);while(t--){scanf("%d%d",&n,&k);for(int i = 1; i <= n; i++)scanf("%d",&X[i]);sort(X+1,X+1+n);__int64 ans = 0;for(int i = 1,j = 1; i <= n; i++){while(j + 1 <= n && X[j+1] - X[i] <= k) j++;ans += j - i;}printf("%I64d\n",ans);}return 0;
}

hdu 5178(尺取法)相关推荐

  1. hdu 1937(尺取法)

    题意:给定一个R*C的矩阵,选择一个面积最小的子矩阵,使得其内部'.'的个数>=k. 解题思路:这道题如果时普通的枚举,会要达到O(N^5)严重超时.这里可以采用高效的枚举方法--尺取法. 首先 ...

  2. Codeforces 1548B Integers Have Friends 尺取法 Hdu 7073 Integers Have Friends 2.0 力能扛鼎随机算法

    文章目录 题意 题解 CF1548B 题解 Hdu 7073 CF1548B HDU7073 题意 定义数的好友组为一个集合SSS,取正整数m>1,∀x∈s,xmodmm>1,\foral ...

  3. hdu 5358(尺取法)

    解题思路:这题可以利用尺取法,不过需要两个指针.如果采用一个指针,会出现这种情况,由于是取对数,所以中间可能会有很多log2S(i,j)的值相等,如果只有一个指针,会使得一些区间没有被算进去.比如0, ...

  4. hdu 5672(尺取法)

    题意:有一个10<=长度<=1000000的字符串,仅由小写字母组成.求有多少子串,包含至少k(1<= k <= 26)个不同的字母. 解题思路:利用尺取法求符合条件的临界区间 ...

  5. 【HDU - 5672】String(尺取法)

    题干: There is a string SS.SS only contain lower case English character.(10≤length(S)≤1,000,000)(10≤le ...

  6. HDU5178 pairs【二分法】【尺取法】

    pairs  HDU - 5178 John has nn points on the X axis, and their coordinates are (x[i],0),(i=0,1,2,-,n− ...

  7. 解题报告 (十三) 尺取法

    文章目录 尺取法 解题报告 PKU 2100 Graveyard Design PKU 3061 Subsequence PKU 2739 Sum of Consecutive Prime Numbe ...

  8. 尺取法 --算法竞赛专题解析(2)

    本系列文章将于2021年整理出版,书名<算法竞赛专题解析>. 前驱教材:<算法竞赛入门到进阶> 清华大学出版社 2019.8 网购:京东 当当      作者签名书 如有建议, ...

  9. hdu6119 小小粉丝度度熊【尺取法(滑动窗口)】

    这是2017百度之星初赛二的赛题. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6119 代码思路: 排序后合并交叉区间 使用尺取法(滑动窗口法),每 ...

最新文章

  1. ibatis中如何调用出参为游标的存储过程
  2. 【数据平台】python语言NLP库Gensim初识
  3. 26. Leetcode 206. 反转链表 (链表-反转链表)
  4. python避免深度嵌套的if-else_避免嵌套If语句?(Python 2.7)
  5. 线性表及其逻辑和存储结构(二级)
  6. C++:23 再议const的用法(下)
  7. 【Python数据分析】数据挖掘建模——分类与预测——回归分析
  8. IE Tab 让Chrome兼容IE
  9. 仿药易通输入单位信息后如果没有则自动加入功能
  10. 字符编码-- Unicode(1991年)
  11. 【数据库】用户sa登录失败,错误:18456
  12. win系统装机及磁盘分区、清理
  13. socket服务器显示未响应,QTCPSOCKET 客户端已连接 而服务器无响应
  14. 公司企业邮箱账号格式怎么填?
  15. HikariCP配置max-lifetime
  16. 如何在电脑/手机上将JPEG图片保存为PDF?
  17. web开发详解,学习web前端开发的网站
  18. JDBC和Maven工程的创建
  19. 东北话编程,大写的服!这是一个丧心病狂的Github项目!
  20. 大数据风控---身份反欺诈信贷全流程常用指标及策略

热门文章

  1. 活动 | 玩转“视”界杯 —— 2018 上半年广告数据分析及短视频分享
  2. 第三次作业-结对编程
  3. 关于maven仓库中的_remote.repositories
  4. python argpare 模块的简单用法
  5. 实例解说Linux命令行uniq (转)
  6. PPT幻灯片从自动翻页设置为手动翻页技巧图文教程
  7. Javascript学习------内部对象 String Date event(重要)
  8. 经验总结:按需加载JS和css
  9. 动态规划-装配线调度
  10. VB100年底测试:McAfee金山遗憾出局 瑞星表现令人意外