首页 > 其他分享 >整体二分

整体二分

时间:2022-11-20 20:11:52浏览次数:36  
标签:二分 cnt return int 整体 mid nlogn

动态第k大,第k小,离线下来。

考虑第k小怎么求,二分一个数值,然后扫一遍有多少小于等于 \(mid\) 的。一次nlogn,多次\(n^2log\),既然你的是我的,我的就是你的,你做的就是我做的,我做的就是你做的,如果我做了,你又做,不就冗余了吗,那么就能一起二分,这样就是\(nlogn\)。怎么一起,还是枚举一个值,然后扫一下序列,有cnt个小于等于mid,把k小于等于cnt划分到左边,其余的划分到右边,分治,用线段树分析一波,就是\(nlogn\)。注意如果[l,mid],[mid + 1,r]有一个为空了,及时return,保证时间复杂度。就好像线段树单点修改本来是log的,如果左右儿子都扫,变成nlogn。

动态,就是多了一个修改,添加。

点击查看代码
void solve(int l,int r,int L,int R){
    if(L > R)return;
    if(l == r){
        for(int i = L;i <= R;++i)if(q[i].opt == 1)ans[q[i].id] = l;
        return;
    }
    int mid = l + r >> 1,ed1 = 0,ed2 = 0;
    for(int i = L;i <= R;++i){
        if(q[i].opt == 0){
            if(q[i].l <= mid){
                T.add(q[i].r,q[i].k);
                q1[++ed1] = q[i];
            }else q2[++ed2] = q[i];
        }else{
            int t = T.ask(q[i].r) - T.ask(q[i].l - 1);
            if(q[i].k <= t){
                q1[++ed1] = q[i];
            }else q[i].k -= t,q2[++ed2] = q[i];
        }
    }
    for(int i = 1;i <= ed1;++i)if(q1[i].opt == 0)T.add(q1[i].r,-q1[i].k);
    for(int i = 1;i <= ed1;++i)q[L + i - 1] = q1[i];
    for(int i = 1;i <= ed2;++i)q[L + ed1 + i - 1] = q2[i];
    solve(l,mid,L,L + ed1 - 1);
    solve(mid + 1,r,L + ed1,R);
}

标签:二分,cnt,return,int,整体,mid,nlogn
From: https://www.cnblogs.com/zasdcn/p/16909384.html

相关文章

  • 领域驱动整体流程
    1.自下而上DDD自下而上的领域建模通常采用事件风暴,通过头脑风暴列出所有可能的业务行为和事件,然后找出产生这些行为的领域对象。通过事件风暴来梳理业务和抽象,在事件风暴......
  • 代码随想录刷题营day1|704.二分查找 34. 有序数组找首位末位 35.搜索插入的位置 27.移
    一、数组理论基础数组下标都是从0开始的数组内存空间的地址是连续的数组的元素是不能删的,只能覆盖二、刷题第一题704.二分查找题目链接:https://leetcode.com/prob......
  • 二分查找
    在单调递增序列a中查找>=x的数中最小的一个(即x或x的后继)while(l<r){intmid=(l+r)/2; if(a[mid]>=x) r=mid; elsel=mid+1; }returna[l];在单调递......
  • 二分图相关知识+染色法+匈牙利
    一、相关概念:1、二分图把图中的点分到两个集合中,集合内的点之间没有边相连,边存在于两个集合之间2、匹配、最大匹配、完美匹配匹配:匹配是边的集合,任意两条边都没有公共......
  • 上帝视角看Vue源码整体架构+相关源码问答
    前言这段时间利用课余时间夹杂了很多很多事把Vue2源码学习了一遍,但很多都是跟着视频大概过了一遍,也都画了自己的思维导图。但还是对详情的感念模糊不清,故这段时间对源码......
  • 力扣704(java&python)-二分查找(简单)
    题目:给定一个 n 个元素有序的(升序)整型数组 nums和一个目标值 target ,写一个函数搜索 nums 中的target,如果目标值存在返回下标,否则返回-1。示例1:输入:nums......
  • 整体二分
    感谢Sentoayaka姐姐的帮助,没有她就没有这篇文章。我爱神里凌华❥引入这是一道主席树板子:https://www.luogu.com.cn/problem/P3834给你一个长为\(n\)数组\(a\)和......
  • 792. 匹配子序列的单词数 ----- find()暴力、队列分桶查询、二分法哈希
    给定字符串s 和字符串数组 words,返回  words[i] 中是s的子序列的单词个数 。字符串的子序列是从原始字符串中生成的新字符串,可以从中删去一些字符(可以是none)......
  • 代码随想录day1---LeetCode704二分查找&27移除元素
    LeetCode704二分查找[https://leetcode.cn/problems/binary-search/]题目:给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的......
  • 二分搜索算法
    目录介绍基本的二分搜索思路代码实现:查找左边界的二分搜索思路代码实现:查找右边界的二分搜索思路代码实现:介绍二分查找适用于已经排序的序列,通过对搜索区间折半的方式查......