首页 > 其他分享 >P1747 单调不降序列中与x最接近元素

P1747 单调不降序列中与x最接近元素

时间:2023-05-23 15:14:40浏览次数:30  
标签:arr right 不降 P1747 mid int 查找 单调 left

#include<iostream>
using namespace std;
int arr[100010];
int main()
{
    int n;
    cin >> n;
    int i;
    for (i = 1; i <= n; i++)
    {
        cin >> arr[i];        //输入非降序列
    }
    int m;
    cin >> m;
    while (m--)                //输入x
    {
        int flag = 0;        //标志变量
        int k;                //x(不小心设成了k),以下k均代表x
        cin >> k;
        
        //二分查找k
        
        int left = 1, right = n;
        while (left + 1 < right)
        {
            int mid = (left + right) / 2;
            //如果找到k,那么标志变量变成1,退出查找找,与x最接近的就是查找到的这个数
            if (arr[mid] == k)
            {
                flag = 1;
                break;
            }
            if (arr[mid] < k)        left = mid;
            else                            right = mid;
        }
        // 在序列中查找到k
        if (flag)            cout << k << endl;
        //未查找到k的话,判断此时arr[left]-k和arr[left+1]-k哪个小,输出较小的那个
        else if (abs(arr[left] - k) <= abs(arr[left + 1] - k))        cout << arr[left] << endl;
        else cout << arr[left + 1] << endl;
    }
    return 0;
}

 

标签:arr,right,不降,P1747,mid,int,查找,单调,left
From: https://www.cnblogs.com/lhf123/p/17425226.html

相关文章

  • 单调队列优化dp
    单调队列优化dp对于一些比较简单的题目,我们可以直接凭借经验进行优化。但是对于类似\(max(f[j-kw]+kv)\)(多重背包)我们就很难凭借经验找到优化方式了这个时候,我们就可以尝试一下下面的方法:我们观察一些简单的,可以单调队列优化的方程,他们都有这样的形式:\(max/min(g[i-k])(L\l......
  • 7935: 最大值问题 单调队列
    描述 给定n个正整数,crq先选了第1~k个数,要求yuyu求出最大值,yuyu轻松完成,crq直接甩出一堆,要求第2~k+1个,3~k+2个,...,n-k+1~n个,全部都求出来,之后便轻松休息了。  输入 第一行两个整数 n和k(1≤k≤n≤106)。第二行 n个整数,表示编号1~n方格中的数字ai(1≤ai≤3×107)。......
  • 【Antd】表单调整输入框对齐方式:
    constformItemLayout={labelCol:{//左边文字xs:{span:24},sm:{span:6},},wrapperCol:{//右边输入框xs:{span:24},sm:{span:16},},};consttailFormItemLayout={wrapperCol:{xs......
  • D1. Range Sorting (Easy Version)(单调栈+思维)
    题目D1.RangeSorting(EasyVersion)题意给一个整数n和一个数组a[1~n]一次次排序操作的代价是,r-l求把所有子数组,排成有序的最小代价和思路easy版本可以用O(\(n^2\))的算法,我们可以枚举左右端点假设一段的最优排序方法如图任意长度的一段序列排序可能是排序多个子......
  • 单调队列算法模板及应用
    文章和代码已经归档至【Github仓库:https://github.com/timerring/algorithms-notes】或者【AIShareLab】回复算法笔记也可获取。队列算法模板//hh表示队头,tt表示队尾intq[N],hh=0,tt=-1;//向队尾插入一个数q[++tt]=x;//从队头弹出一个数hh++;//队头......
  • 滑动窗口 单调队列
    描述 给一个长度为N的数组,一个长为K的滑动窗体从最左端移至最右端,你只能看到窗口中的K个数,每次窗体向右移动一位,如下图:你的任务是找出窗体在各个位置时的最大值和最小值。  输入 第1行:两个整数N和K;第2行:N个整数,表示数组的N个元素(≤2×109 );对......
  • 738. 单调递增的数字
    当且仅当每个相邻位数上的数字x和y满足x<=y时,我们称这个整数是单调递增的。给定一个整数n,返回小于或等于n的最大数字,且数字呈单调递增。输入:n=10输出:9我的解法classSolution{public:intmonotoneIncreasingDigits(intn){std::v......
  • 5.8 单调栈 & 悬线法 & 相关的题(和 dp 也多少沾点)
    今日小题:一个CFdiv2的A的签到题,记录一下这个做法:求一个字符串的最长非回文字符串:无解:长度为1或整个串每个字符都一样;有解:判断这个串是不是回文,如果不是,输出长度,如果是输出长度-1。感觉非常妙。不写证明,感觉非常好想...#include<bits/stdc++.h>usingnamespacestd;i......
  • 【数据结构】单调队列专题(滑动窗口问题)
    一维滑动窗口154.滑动窗口下标从0开始,数组模拟队列#include<iostream>usingnamespacestd;constintN=1e6+10;intn,k;inta[N],q[N];intmain(){scanf("%d%d",&n,&k);for(inti=0;i<n;i++)scanf("%d",&a......
  • 证明 一个 和 三角函数 有关 的 函数 单调递减
    吧主 @黎合胜  只会出物理题,  数学题还得我来,  嘿嘿 。 数学吧  《三角函数问题》     https://tieba.baidu.com/p/8384790600   。  ......