hdu 5178(尺取法)
pairs
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.
#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(尺取法)相关推荐
- hdu 1937(尺取法)
题意:给定一个R*C的矩阵,选择一个面积最小的子矩阵,使得其内部'.'的个数>=k. 解题思路:这道题如果时普通的枚举,会要达到O(N^5)严重超时.这里可以采用高效的枚举方法--尺取法. 首先 ...
- 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 ...
- hdu 5358(尺取法)
解题思路:这题可以利用尺取法,不过需要两个指针.如果采用一个指针,会出现这种情况,由于是取对数,所以中间可能会有很多log2S(i,j)的值相等,如果只有一个指针,会使得一些区间没有被算进去.比如0, ...
- hdu 5672(尺取法)
题意:有一个10<=长度<=1000000的字符串,仅由小写字母组成.求有多少子串,包含至少k(1<= k <= 26)个不同的字母. 解题思路:利用尺取法求符合条件的临界区间 ...
- 【HDU - 5672】String(尺取法)
题干: There is a string SS.SS only contain lower case English character.(10≤length(S)≤1,000,000)(10≤le ...
- 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− ...
- 解题报告 (十三) 尺取法
文章目录 尺取法 解题报告 PKU 2100 Graveyard Design PKU 3061 Subsequence PKU 2739 Sum of Consecutive Prime Numbe ...
- 尺取法 --算法竞赛专题解析(2)
本系列文章将于2021年整理出版,书名<算法竞赛专题解析>. 前驱教材:<算法竞赛入门到进阶> 清华大学出版社 2019.8 网购:京东 当当 作者签名书 如有建议, ...
- hdu6119 小小粉丝度度熊【尺取法(滑动窗口)】
这是2017百度之星初赛二的赛题. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6119 代码思路: 排序后合并交叉区间 使用尺取法(滑动窗口法),每 ...
最新文章
- ibatis中如何调用出参为游标的存储过程
- 【数据平台】python语言NLP库Gensim初识
- 26. Leetcode 206. 反转链表 (链表-反转链表)
- python避免深度嵌套的if-else_避免嵌套If语句?(Python 2.7)
- 线性表及其逻辑和存储结构(二级)
- C++:23 再议const的用法(下)
- 【Python数据分析】数据挖掘建模——分类与预测——回归分析
- IE Tab 让Chrome兼容IE
- 仿药易通输入单位信息后如果没有则自动加入功能
- 字符编码-- Unicode(1991年)
- 【数据库】用户sa登录失败,错误:18456
- win系统装机及磁盘分区、清理
- socket服务器显示未响应,QTCPSOCKET 客户端已连接 而服务器无响应
- 公司企业邮箱账号格式怎么填?
- HikariCP配置max-lifetime
- 如何在电脑/手机上将JPEG图片保存为PDF?
- web开发详解,学习web前端开发的网站
- JDBC和Maven工程的创建
- 东北话编程,大写的服!这是一个丧心病狂的Github项目!
- 大数据风控---身份反欺诈信贷全流程常用指标及策略
热门文章
- 活动 | 玩转“视”界杯 —— 2018 上半年广告数据分析及短视频分享
- 第三次作业-结对编程
- 关于maven仓库中的_remote.repositories
- python argpare 模块的简单用法
- 实例解说Linux命令行uniq (转)
- PPT幻灯片从自动翻页设置为手动翻页技巧图文教程
- Javascript学习------内部对象 String Date event(重要)
- 经验总结:按需加载JS和css
- 动态规划-装配线调度
- VB100年底测试:McAfee金山遗憾出局 瑞星表现令人意外