首页 > 其他分享 >【基础】整体二分

【基础】整体二分

时间:2024-04-25 20:48:16浏览次数:23  
标签:二分 cnt return int 基础 整体 vq bs check

namespace MultiBinarySearch {

static const int MAX_QUERY = 2e5 + 10;

struct Query {
    int id, cnt;    // 分cnt组时,每组的大小最大有多大?容易知道分的组数越多,其最大的siz会变小。
};

int ans[MAX_QUERY];

int check (int M) {
    int cnt = 0;
    // 实现这个根据M计算cnt的函数。通常复杂度为O(n)
    return cnt;
}

void multi_bs (int L, int R, const vector<Query> &vq) {
    if (vq.empty()) {
        // 一定要加这一句,否则如果check不是O(1)的,则复杂度不对
        return;
    }
    if (L == R) {
        for (auto &q : vq) {
            ans[q.id] = L;
        }
        // 注意处理无解的情况
        return;
    }
    int M = (L + R + 1) >> 1;
    int cnt = check (M);    // 当猜的答案为M时,最多能分cnt组
    vector<Query> vq1, vq2;
    for (auto &q : vq) {
        if (cnt >= q.cnt) {
            // cnt能满足q的要求,所以q至少为 M,对应 L = M
            vq1.push_back (q);
        } else {
            // cnt不能满足q的要求,所以q至多为 M - 1,对应 R = M - 1
            vq2.push_back (q);
        }
    }
    multi_bs (M, R, vq1);
    multi_bs (L, M - 1, vq2);
    return;
}

};

using namespace MultiBinarySearch;

标签:二分,cnt,return,int,基础,整体,vq,bs,check
From: https://www.cnblogs.com/purinliang/p/18158522

相关文章

  • 线性代数基础
    线性代数基础煎蛋的东西不再赘述。\(n\)个向量,若存在向量能被其他向量线性表示,则称这些向量线性相关,否则线性无关。矩阵的行秩,将矩阵看成若干个行向量,从这些向量中选取尽可能多的向量满足这些向量线性无关,选取的个数\(k\)即为矩阵的秩。矩阵的列秩同理,一般来说,矩阵的秩默认......
  • 说说你对二分查找的理解?如何实现?应用场景?
     一、是什么在计算机科学中,二分查找算法,也称折半搜索算法,是一种在有序数组中查找某一特定元素的搜索算法想要应用二分查找法,则这一堆数应有如下特性:存储在数组中有序排序搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束如果某一特定元素大......
  • InfluxDB 客户端基础操作2
    InfluxDB提供了客户端influx用于管理数据库。自2.1版本,客户端influx就和服务端influxd分离开了,需要单独安装。安装方法非常检查,解压缩复制到到/user/bin下面即可。在1.x版本中客户端支持SQL语句,但在2.x版本中,已经不支持SQL语法了。这对熟悉关系型数据库的人来说不太友好。官......
  • 三十分钟入门基础Go(Java小子版)
    前言Go语言定义Go(又称Golang)是Google的RobertGriesemer,RobPike及KenThompson开发的一种静态、强类型、编译型语言。Go语言语法与C相近,但功能上有:内存安全,GC,结构形态及CSP-style并发计算。适用范围本篇文章适用于学习过其他面向对象语言(Java、Php),但没有学过......
  • Docker基础——50台容器异常占用宿主机90%内存问题
    一、问题描述一台裸金属服务存有50台业务容器,通过Docker进程起服务,由system-runtime守护容器的生命周期。free-h查看裸金属服务器内存没有正常释放,cat/proc/meminfo查看内存分配无异常,怀疑裸金属服务器的Java进程存在Glibc内存泄漏,或Docker容器没有正常关闭进程释放内存有关;......
  • 二分法,冒泡排序
    Ⅰ算法之二分法算法其实就是解决问题的有效方法'''二分法使用有前提:数据集必须有先后顺序(升序,降序)''''''二分法原理 获取数据集中间的元素比对大小 如果中间元素大于目标数据那么保留数据集的左边一半 如果中间元素小于目标数据那么保留数据集的右边一半 针对剩......
  • 二分法
    defbinary_find(list,target):left,right=0,len(list)whileleft<=right:mid=(left+right)//2print(list[mid])list_left=list[left:mid]print(list_left)list_right=list[mid+1:right]print(list_right)iftarget......
  • C++基础 变量和基本类型
    一个char类型的大小和一个机器字节一样。char在实现的时候会是unsignedchar和signedchar当中的一种,这与机器有关。wchar_t,char16_t,char32_t为国际化提供支持,这几种字符的字面值需要加前缀。C++标准规定数据的宽度:short<=int<=long<=longlong.当unsignedint和int进行运......
  • Shell基础
    1、统计50台docker容器内存使用总量之和dockerstats$(dockerps-a-q)--no-stream|awk-F'''{print$4}'|sed'/CPU/d'>/tmp/docker_memory.txtawk'{a+=$1}END{printa}'/tmp/docker_memory.txt 注解:dockerps-a-q:打印容......
  • 软件工程基础-实验一-原型设计-作家助手
    实验要求一:对比分析对比分析墨刀、Axure、Mockplus等原型设计工具的各自的适用领域及优缺点。一丶墨刀墨刀是一款在线的产品设计协作软件,可以解决产设研团队中存在的项目管理权限不明、版本管理混乱、协作低效等诸多问题。优点:功能强大:可满足产品经理、设计师、开发在产品设......