首页 > 其他分享 >最长单调上升子序列(贪心+二分)

最长单调上升子序列(贪心+二分)

时间:2023-07-28 19:45:20浏览次数:40  
标签:二分 int 序列 最长 单调 贪心

这个的思路就是再开一个数组,存储长度为i的最长上升子序列的最后一个数字是多少,这个数组可以保证递增,之后开始二分,只要当前这个数是大于i-1的数但小于i的数,那就可以更新i的数,这里就是贪心的思想,相同长度结尾数字越小越好

int len=0;
    for(int i=1;i<=n;i++){
        int l=1,r=len+1;
        int ans=-1;
        while(l<=r){
            int mid=(l+r)/2;
           // cout<<a[i]<<" "<<q[mid]<<endl;
            if(q[mid]<a[i]){

                l=mid+1;
            }
            else{
                ans=mid;
                r=mid-1;
            }
        }
        if(ans!=-1) {
            q[ans] = a[i];
            len=max(len,ans);
        }
        else{
            q[len+1]=a[i];
            len++;
        }
    }
    cout<<len<<endl;

标签:二分,int,序列,最长,单调,贪心
From: https://www.cnblogs.com/zyzzzz/p/17588755.html

相关文章

  • 【C语言】二分查找算法
    在⼀个升序的数组中查找制定的数字n,很容易想到的⽅法就是遍历数组,但是这种⽅法效率⽐较低,⽐如我买了⼀双鞋,你好奇问我多少钱,我说不超过300元。你还是好奇,你想知道到底多少,我就让你猜,你会怎么猜?你会1,2,3,4...这样猜吗?显然很慢;⼀般你都会猜中间数字,⽐如:150,然后看⼤了还是⼩了,这就是......
  • 贪心(不同情况下有不同策略)题单报告
    书接上回。感觉这个标题起得云里雾里的颇有上次讲的“反悔自动机”的奇妙风范,坏了会回旋镖插我自己身上了(感觉这样的贪心很厉害。什么叫不同情况下有不同策略呢?就是说你要分讨,分讨的每一种情况我们都要保证这是当前的最优解。这听起来是不是还是很扯,其实这是为了方便我自己看的......
  • 代码随想录算法训练营第一天| LeetCode 704. 二分查找、LeetCode 27. 移除元素
    704.二分查找    题目链接:https://leetcode.cn/problems/binary-search/   视频链接:https://www.bilibili.com/video/BV1fA4y1o715     文章讲解:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html    卡哥的题目建......
  • 贪心(反悔贪心)题单报告
    Democy爷给了一份贪心的题单,但是由于我是小笨比,所以很多题我都不是很会做,现在来简单写一份总结,加强一下印象qwq。首先什么叫贪心?贪心就是我每次都选择一个最大值。比如说我现在有\(n\)个物品,每个物品都有一个价值,我们可以选\(k\)件物品,我们怎么样让选择的价值和最大呢?傻子......
  • 【学习笔记】单调队列和单调栈
    单调栈以这道题为例:P5788。我们考虑维护一个单调栈,里面存的是下标,使里面的下标对应的元素从栈顶到栈底是单调上升的。我们从\(n\rightarrow1\)枚举\(a_i\)对于每个\(i\),如果栈非空,令栈顶的下标为\(j\),若\(a_j\)不比\(a_i\)大,那么这个栈顶元素由于值又小,位置又靠后,如......
  • 左神算法-基础06-前缀树&贪心算法
    左神算法-基础06-前缀树&贪心算法介绍前缀树何为前缀树?如何生成前缀树?例子:一个字符串类型的数组arr1,另一个字符串类型的数组arr2。arr2中有哪些字符,是arr1中出现的?请打印。arr2中有哪些字符,是作为arr1中某个字符串前缀出现的?请打印。arr2中有哪些字符,是作为arr1中某个......
  • UOJ #284. 快乐游戏鸡题解(长链剖分+单调栈合并)
    UOJ#284.快乐游戏鸡题解(长链剖分+单调栈合并)题面一番战斗之后,程序猿被计算鸡们赶走了。随着垫子计算鸡一声令下:“追!”,于是计算鸡村全村上下开始乘胜追击。计算鸡们希望在新的一年到来之际给程序猿以重创,出掉这一年的恶气。可是程序猿一追就走,一走就跑,一跑就无影无踪。计算鸡......
  • 决策单调性优化dp
    四边形不等式定义若函数\(w(x,y)(\mathbb{Z}\times\mathbb{Z}\rightarrow\mathbb{Z})\)对于\(\foralla,b,c,d\in\mathbb{Z}\),其中\(a\leqb\leqc\leqd\),都有\(w(a,d)+w(b,c)\geqw(a,c)+w(b,d)\),则称函数\(w\)满足四边形不等式也就是交叉小于包含这......
  • 快排/归并/二分
    排序快速排序主要思想:分治排序方式:确定分界点:左边界:q[l],中间值:q[(l+r)/2],右边界,或者随机调整区间:小于等于x的在x左半边,大于等于x的在x右半边(最难的部分)法一:开a[],b[]扫描一遍q[],q[i]>=xq[i]->a[];q[i]<=xq[i]->b[];a[]->q[]b[]->b[]法二(更优美):......
  • 二分
    二分二分查找作用:是用来在一个有序数组中查找某一元素的算法。过程:以在一个升序数组中查找一个数为例。它每次考察数组当前部分的中间元素,如果中间元素刚好是要找的,就结束搜索过程;如果中间元素小于所查找的值,那么左侧的只会更小,不会有所查找的元素,只需到右侧查找;如果中间元......