二分练习

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

给你一个序列,然后给你m个元素,让你从序列中找出与每个元素最接近的数字输出来,如果有两个就输出两个。

输入

多组输入,第一行给你两个数n(0 < n < 10000000),m(0 < m < n),接下来是数列的n个数,然后再输入m个元素,让你找出最接近每个元素的值。如果有两个,按从小到大输出。

输出

这m个数分别输出最接近每个元素的值,组与组之间输出一个空行。

示例输入

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相关推荐

  1. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  2. 分治算法的设计思想(二分检索、二分归并排序)

    分治策略思想: 将原问题划分或者归结为规模较小的子问题. 递归或迭代求解每一个问题. 将子问题的解综合得到原问题的解. 性质: 子问题与原问题具有相同的性质. 子问题的求解彼此独立. 划分时子问题的规 ...

  3. LeetCode简单题之二分查找

    题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: n ...

  4. 二分查找模板全面总结

    二分查找 二分法的引入 情形1 1.X的平方根 2.搜索旋转排序数组 情形2 1.第一个错误的版本 2.寻找峰值 3.寻找旋转排序数组中的最小值 情形3 在排序数组中查找第一个和最后一个位置 当遇到查 ...

  5. [C] [二分] C语言实现快速排序

    为了以防万一有人想不开想手撕快排呢?比如我. 通过快排来理解二分思想 什么是快排? 快排的思想不难,理解好递归很重要. 什么是递归? 递归,就是在运行的过程中调用自己. 构成递归需具备的条件: 子问题 ...

  6. Showstopper [POJ3484] [二分] [思维]

    Description 给你n个数列,问哪一个数字在所有的数列中出现了奇数次(最多一个). Sample Input 1 10 1 2 10 11 10 1 1 10 11 10 1 4 4 1 1 ...

  7. BZOJ3166 [Heoi2013]Alo 【可持久化trie树 + 二分 + ST表】

    题目 Welcome to ALO ( Arithmetic and Logistic Online).这是一个VR MMORPG , 如名字所见,到处充满了数学的谜题. 现在你拥有n颗宝石,每颗宝石 ...

  8. usaco The Perfect Stall(二分匹配模板)

    其实二分匹配都是很早之前看的不过又忘了现在再看看比第一次好理解多了. /* ID:jinbo wu TASK:stall4 LANG:C++ */ #include<bits/stdc++.h& ...

  9. php二分搜索,php如何实现二分搜索法

    在php中实现二分搜索法的方法:首先,取数组中的一个值作为边界:然后递归搜索直到最后,代码是[if ($ low 本教程的操作环境:windows7系统,PHP 5.6版,DELL G3电脑.此方法适 ...

最新文章

  1. 《Python数据可视化编程实战》——5.5 用OpenGL制作动画
  2. android 之SharedPreferences,SDCard以及网络存储
  3. Apache ZooKeeper - FourLetterCommands运维命令
  4. NeuralBuild-用于Java、C#、PHP的DAO产生器
  5. bootstrap form表单提交_[Selenium]28. 处理表单元素
  6. Access数据库查询练习专用数据库 -手机号码归属地Access数据库_MobileDB(10万条记录)...
  7. Supercomputer 解题报告
  8. SpringMvc2 使用注解形式发布请求地址
  9. Linux第二周学习笔记(1)
  10. canvas 从入门到入坟
  11. DevExpress之TreeList用法
  12. 计算机中丢失python27 dll_python27.dll
  13. 上海大华条码称代码_上海大华条码秤的调试方法
  14. dnf 台服服务器pvf修改器,求教怎么用pvf修改器自制装备
  15. grpc生成pb.go文件报错github.com/gogo/protobuf/gogoproto/gogo.proto: File not found.
  16. 系统封装失败遇到windows 无法分析或处理
  17. 淋巴细胞转化中PHP的作用,淋巴细胞转化试验介绍|意义
  18. python学了没有用_如何用Python进行无监督学习
  19. Windows Phone开发-- 多任务之墓碑机制
  20. 知网CAJ转PDF(硕博论文带书签)

热门文章

  1. 开源FPGA硬件模拟游戏机,原汁原味的复古游戏体验带你回童年
  2. AI性能基准测试从此有了「中国标准」!英伟达、谷歌可以试试这套算力卷
  3. RTX 3090 AI性能实测:FP32训练速度提升50%,张量核心缩水
  4. 浅谈CPU、内存、虚拟内存、硬盘之间的关系
  5. sql的执行顺序 (where、groupby、having等)
  6. 常用命令-临时记录!
  7. 4.IT-解决方案-4-Cluster-Win2K3
  8. java 应用是单机集群_Java集群优化——使用Dubbo对单一应用服务化改造
  9. EdgeGallery — MEP — 安装部署
  10. Ceph 的用户管理与认证