【2781】二分练习 sdutOJ
二分练习
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
输入
输出
示例输入
8 4 1 2 3 4 5 6 8 11 4 9 2 7
示例输出
4 8 2 6 8
#include <stdio.h>
int a[100000010];
void qsort(int *a,int star ,int fin)//快排函数
{
int key=a[star],i=star,j=fin;
if(star>=fin)
return;
while(i<j)
{
while(i<j&&a[j]>=key) j--; a[i]=a[j];
while(i<j&&a[i]<=key) i++;
a[j]=a[i];
}
a[i]=key;
qsort(a,star,i-1);
qsort(a,i+1,fin);
}
int down(int *a,int low,int high,int key)//寻找key的前一个数
{
int mid;
int r=-1;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]<=key)
{
low=mid+1;
r=mid;
}
else high=mid-1;
}
return r;
}
int up(int *a,int low,int high,int key )//寻找key的后一个数
{
int mid;
int r=-1;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]>=key)
{
r=mid;
high=mid-1;
}
else
low=mid+1;
}
return r;
}
int main()
{
int n,m,i,k;
while(~scanf("%d %d",&n,&m))
{
for(i=0; i<n; i++)
scanf("%d",&a[i]);
qsort(a,0,n-1);
for(i=0; i<m; i++)
{
scanf("%d",&k);
int kmax=up(a,0,n-1,k);
int kmin=down(a,0,n-1,k);
if(kmax==-1)//若不存在比key大的,输出比key小的
printf("%d\n",a[kmin]);
else if(kmin==-1)//若不存在比key小的,输出比key大的
printf("%d\n",a[kmax]);
else if(a[kmax]==a[kmin])
printf("%d\n",a[kmin]);
else
{
if((a[kmax]-k)==(k-a[kmin]))
printf("%d %d\n",a[kmin],a[kmax]);
else if((a[kmax]-k)>(k-a[kmin]))
printf("%d\n",a[kmin]);
else
printf("%d\n",a[kmax]);
}
}
printf("\n");
}
return 0;
}
转载于:https://www.cnblogs.com/jiangyongy/p/3971691.html
【2781】二分练习 sdutOJ相关推荐
- 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/
大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...
- 分治算法的设计思想(二分检索、二分归并排序)
分治策略思想: 将原问题划分或者归结为规模较小的子问题. 递归或迭代求解每一个问题. 将子问题的解综合得到原问题的解. 性质: 子问题与原问题具有相同的性质. 子问题的求解彼此独立. 划分时子问题的规 ...
- LeetCode简单题之二分查找
题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: n ...
- 二分查找模板全面总结
二分查找 二分法的引入 情形1 1.X的平方根 2.搜索旋转排序数组 情形2 1.第一个错误的版本 2.寻找峰值 3.寻找旋转排序数组中的最小值 情形3 在排序数组中查找第一个和最后一个位置 当遇到查 ...
- [C] [二分] C语言实现快速排序
为了以防万一有人想不开想手撕快排呢?比如我. 通过快排来理解二分思想 什么是快排? 快排的思想不难,理解好递归很重要. 什么是递归? 递归,就是在运行的过程中调用自己. 构成递归需具备的条件: 子问题 ...
- Showstopper [POJ3484] [二分] [思维]
Description 给你n个数列,问哪一个数字在所有的数列中出现了奇数次(最多一个). Sample Input 1 10 1 2 10 11 10 1 1 10 11 10 1 4 4 1 1 ...
- BZOJ3166 [Heoi2013]Alo 【可持久化trie树 + 二分 + ST表】
题目 Welcome to ALO ( Arithmetic and Logistic Online).这是一个VR MMORPG , 如名字所见,到处充满了数学的谜题. 现在你拥有n颗宝石,每颗宝石 ...
- usaco The Perfect Stall(二分匹配模板)
其实二分匹配都是很早之前看的不过又忘了现在再看看比第一次好理解多了. /* ID:jinbo wu TASK:stall4 LANG:C++ */ #include<bits/stdc++.h& ...
- php二分搜索,php如何实现二分搜索法
在php中实现二分搜索法的方法:首先,取数组中的一个值作为边界:然后递归搜索直到最后,代码是[if ($ low 本教程的操作环境:windows7系统,PHP 5.6版,DELL G3电脑.此方法适 ...
最新文章
- 《Python数据可视化编程实战》——5.5 用OpenGL制作动画
- android 之SharedPreferences,SDCard以及网络存储
- Apache ZooKeeper - FourLetterCommands运维命令
- NeuralBuild-用于Java、C#、PHP的DAO产生器
- bootstrap form表单提交_[Selenium]28. 处理表单元素
- Access数据库查询练习专用数据库 -手机号码归属地Access数据库_MobileDB(10万条记录)...
- Supercomputer 解题报告
- SpringMvc2 使用注解形式发布请求地址
- Linux第二周学习笔记(1)
- canvas 从入门到入坟
- DevExpress之TreeList用法
- 计算机中丢失python27 dll_python27.dll
- 上海大华条码称代码_上海大华条码秤的调试方法
- dnf 台服服务器pvf修改器,求教怎么用pvf修改器自制装备
- grpc生成pb.go文件报错github.com/gogo/protobuf/gogoproto/gogo.proto: File not found.
- 系统封装失败遇到windows 无法分析或处理
- 淋巴细胞转化中PHP的作用,淋巴细胞转化试验介绍|意义
- python学了没有用_如何用Python进行无监督学习
- Windows Phone开发-- 多任务之墓碑机制
- 知网CAJ转PDF(硕博论文带书签)