当前位置: 首页 > article >正文

E. Binary Search

题目链接:Problem - E - Codeforces

题目大意:

初始时有 l=1,r=n+1。

  1. 如果当前 r−l=1,退出二分查找,并且认定 l为二分查找的结果。
  2. 定义 m=⌊2l+r​⌋。
  3. 如果 m≤x,将 l 赋值为 m,否则将 r 赋值为 m。

不断重复以上三个操作直到得到结果。

显然当 p 未排序时二分查找的结果不一定为 x,现在你希望进行不超过两次交换操作,使得操作后的排列 p 能使得二分查找的结果为 x。

一次交换操作为:选择 1≤i,j≤n,交换 pi,pj​。

你需要给出交换的参数,容易证明两次操作总是足够的。

考察内容: 二分, 构造

解题思路:首先先按照题目要求写出二分模板代码,进行二分,如题目要求所说l认定为二分答案,检查最后的a[l]是否为x, 然后构造:当发现a[l]是x时,输出0即可, 不是就将ans的下标与l进行交换。 所以最多进行一次的交换。

#include <bits/stdc++.h>
using namespace std;

using i64 = long long;
using i128 = __int128;

void solve(){
    int n, x;
    cin >> n >> x;
    vector<int> a(n+1);
    int pos = 0;
    for(int i=1; i<=n; i++) {
        cin >> a[i];
        if(a[i]==x) {//记录ans的位置
            pos = i;
        }
    }
    int l = 1, r = n+1;
    while(l+1 < r) {
        int mid = (l+r)>>1;
        if(a[mid] <= x) {
            l = mid;
        }else{
            r = mid;
        }
    }  //题目要求的二分板子  
    if(a[l] == x) {
        cout << 0 << "\n";
    }else{
        cout << 1 << "\n"; //找不到让最后的位置变为ans即可
        cout << l << " " << pos << "\n";
    }
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t;
    cin >> t;
    while(t--) {
        solve();
    }
    return 0;
}

欢迎大佬指正。


http://www.kler.cn/a/525400.html

相关文章:

  • RDK X5运行DeepSeek-R1-Distill-Qwen-1.5B,体验长思维链的语言大模型!
  • 【C++ 真题】P1706 全排列问题
  • 大数据治理实战:架构、方法与最佳实践
  • LangChain的开发流程
  • 二叉树的最大深度(遍历思想+分解思想)
  • 求解旅行商问题的三种精确性建模方法,性能差距巨大
  • 是否需要显式使用 epoll_ctl ( fd , EPOLL_CTL_DEL , ... ) 来从红黑树里显式删除过期的套接字
  • python学opencv|读取图像(四十九)原理探究:使用cv2.bitwise()系列函数实现图像按位运算
  • 洛谷P3884 [JLOI2009] 二叉树问题(详解)c++
  • 登录授权流程
  • selenium自动化测试框架——面试题整理
  • 深度学习在金融风控中的应用:突破传统模型的瓶颈
  • ML基础-Jupyter notebook中的魔法命令
  • 2024 年度技术总结:从实践到成长
  • 深入剖析TCP协议:原理, 机制与应用
  • 【计算机视觉】目标跟踪应用
  • 文献分享:Informational ecosystems提供了分析数据和代码
  • RK3568中使用QT opencv(显示基础图像)
  • 预测不规则离散运动的下一个结构
  • mT5:一种大规模多语言预训练文本到文本Transformer
  • KVM/ARM——基于ARM虚拟化扩展的VMM
  • 评估训练模型所需的算力
  • 基于Cipher的Java加密工具类
  • C++11新特性之使用using(代替typedef)定义别名
  • CAPL与外部接口
  • ORA-04031 错误