二分

二分算法模板

  1. int bsearch(int *a, int x, int y, int v)
  2. {
  3. int mid;
  4. while(x < y)
  5. {
  6. mid = (x + y) / 2;
  7. if(a[mid] == v)
  8. return mid;
  9. if(a[mid] > v)
  10. y = mid;
  11. else
  12. x = mid + 1;
  13. }
  14. return -1;
  15. }

注意此模板只适用于查找a中是否存在v,存在的话则返回其中一个符合条件的位置,并不一定只有那一个位置,这个视情况而定。

lower_bound

lower_bound()在一个区间内进行二分查找,返回第一个大于等于目标值的位置(地址)

upper_bound

upper_bound()与lower_bound()的主要区别在于前者返回第一个大于目标值的位置(地址)

  1. int lowerBound(int x){
  2. int l=1,r=n;
  3. while(l<=r){
  4. int mid=(l+r)>>1;
  5. if (x>g[mid]) l=mid+1;
  6. else r=mid-1;
  7. }
  8. return l;
  9. }
  10. int upperBound(int x){
  11. int l=1,r=n;
  12. while(l<=r){
  13. int mid=(l+r)>>1;
  14. if (x>=g[mid]) l=mid+1;
  15. else r=mid-1;
  16. }
  17. return l;
  18. }

最长上升子序列LIS

这里提供一组代码,它用于返回数组b中最长的上升子序列的长度

  1. int cal(int *b)
  2. {
  3. vector<int> s;
  4. for(int i = 0; i < n ;i++)
  5. {
  6. if(s.empty()) s.push_back(b[i]);
  7. else
  8. {
  9. vector<int>::iterator it = upper_bound(s.begin(), s.end(), b[i]);
  10. if(it == s.end()) s.push_back(b[i]);
  11. else
  12. *it = b[i];
  13. }
  14. }
  15. return s.size();
  16. }

对应题目:HDU-5532、HDU-6197

**再介绍一个用dp求最长子序列长度的算法,对应紫书P274,状态方程为dp[i]=max ( dp[ i ], dp[ j ]+1 ) ( 0<=j< i, a[ j ] < a[ i ] ) **

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int MAXX=100000+5;
  4. const int INF=INT_MAX;
  5. int a[MAXX],dp[MAXX]; // a数组为数据,dp[i]表示以a[i]结尾的最长递增子序列长度
  6. int main()
  7. {
  8. int n;
  9. while(cin>>n)
  10. {
  11. for(int i=0; i<n; i++)
  12. {
  13. cin>>a[i];
  14. dp[i]=1; // 初始化为1,长度最短为自身
  15. }
  16. int ans=1;
  17. for(int i=1; i<n; i++)
  18. {
  19. for(int j=0; j<i; j++)
  20. {
  21. if(a[i]>a[j])
  22. {
  23. dp[i]=max(dp[i],dp[j]+1); // 状态转移
  24. }
  25. }
  26. ans=max(ans,dp[i]); // 比较每一个dp[i],最大值为答案
  27. }
  28. cout<<ans<<endl;
  29. }
  30. return 0;
  31. }

参考博客:https://blog.csdn.net/wbin233/article/details/77570070

【部分转载】:【lower_bound、upperbound讲解、二分查找、最长上升子序列(LIS)、最长下降子序列模版】的更多相关文章

  1. LeetCode:Search Insert Position,Search for a Range (二分查找,lower_bound,upper_bound)

    Search Insert Position Given a sorted array and a target value, return the index if the target is fo ...

  2. 二分查找、upper_bound、lower_bound

    整理及总结二分查找的判断和边界细节 修改版 package com.leej.binarysearch; import java.util.Arrays; /** * @author jerry * ...

  3. STL 二分查找三兄弟(lower_bound(),upper_bound(),binary_search())

    一:起因 (1)STL中关于二分查找的函数有三个:lower_bound .upper_bound .binary_search  -- 这三个函数都运用于有序区间(当然这也是运用二分查找的前提),以 ...

  4. STL中的二分查找———lower_bound,upper_bound,binary_search

    关于STL中的排序和检索,排序一般用sort函数即可,今天来整理一下检索中常用的函数——lower_bound , upper_bound 和 binary_search . STL中关于二分查找的函 ...

  5. 二分查找(lower_bound和upper_bound)

    转载自:https://www.cnblogs.com/luoxn28/p/5767571.html 1 二分查找 二分查找是一个基础的算法,也是面试中常考的一个知识点.二分查找就是将查找的键和子数组 ...

  6. 二分查找法(binary_search,lower_bound,upper_bound,equal_range)

    binary_search(二分查找) //版本一:调用operator<进行比较 template <class ForwardIterator,class StrictWeaklyCo ...

  7. STL中的二分查找——lower_bound 、upper_bound 、binary_search

    STL中的二分查找函数 1.lower_bound函数 在一个非递减序列的前闭后开区间[first,last)中.进行二分查找查找某一元素val.函数lower_bound()返回大于或等于val的第 ...

  8. Long Jumps(二分查找lower_bound()函数的运用)

    Valery is a PE teacher at a school in Berland. Soon the students are going to take a test in long ju ...

  9. C++算法库学习__std::sort__对 vector进行排序_排序后就可以进行使用std::lower_bound进行二分查找(查找第一个大于等于指定值的迭代器的位置)__std::unique

    std::sort      对vector成员进行排序; std::sort(v.begin(),v.end(),compare);   std::lower_bound 在排序的vector中进行 ...

随机推荐

  1. Kafka 学习之路(二)—— 基于ZooKeeper搭建Kafka高可用集群

    一.Zookeeper集群搭建 为保证集群高可用,Zookeeper集群的节点数最好是奇数,最少有三个节点,所以这里搭建一个三个节点的集群. 1.1 下载 & 解压 下载对应版本Zookeep ...

  2. 基于cxf开发的WebService

    Node.jshttps://www.cnblogs.com/goldlong/p/8027997.htmlQQ音乐apihttps://juejin.im/post/5a35228e51882506 ...

  3. Redis 学习笔记(篇四):整数集合和压缩列表

    整数集合 Redis 中当一个集合(set)中只包含整数,并且元素不多时,底层使用整数集合实现,否则使用字典实现. 那么: 为什么会出现整数集合呢?都使用字典存储不行吗? 整数集合在 Redis 中的 ...

  4. 16 | 脑洞大开:GUI测试还能这么玩(Page Code Gen + Data Gen + Headless)?

  5. 【原创】Docker 搭建Maven私服nexus 3.17初始密码登录不上问题/admin登陆不上问题

    [原创-转载请说明出处] 博主最近在虚拟机中搭建Maven私服,遇到了一个关键问题就是nexus 3.17版本后初始密码不是admin/admin123. 对于nexus不熟悉的我弄了很长时间!!!心 ...

  6. Thinkphp5.0之异常处理

    1.默认异常处理在调试模式下,系统默认展示的错误页面:请输入图片描述 异常处理接管 1.修改config.php 'app_debug' => false,2.在配置文件里添加如下代码 // 异 ...

  7. 【朝花夕拾】Android自定义View篇之(九)多点触控(下)实践出真知

    前言 在上一篇文章中,已经总结了MotionEvent以及多点触控相关的基础理论知识和常用的函数.本篇将通过实现单指拖动图片,多指拖动图片的实际案例来进行练习并实现一些效果,来理解前面的理论知识.要理 ...

  8. python学习 -女神或者男神把微信消息撤回后好慌,有了这个妈妈再也不担心你看不到女神或者男神撤回的消息了(超详解)

    简介 有时候在忙工作,女朋友发了一个消息,就撤回了,但是人天生的都有一颗好奇心,而且在当今这个时代找个女朋友不容易,一个程序猿找一个女朋友更是不容易的.人家好不容易跟你,你还不得把人家当老佛爷侍候着, ...

  9. HDU 4461:The Power of Xiangqi(水题)

    http://acm.hdu.edu.cn/showproblem.php?pid=4461 题意:每个棋子有一个权值,给出红方的棋子情况,黑方的棋子情况,问谁能赢. 思路:注意“ if a play ...

  10. 关系型数据库MySql 数据类型与约束

    MySql数据库 :数据类型与约束 注意 :  在创建数据表的时候,需要对数据表中的字段设置 数据类型和约束, 便于检测用户输入的数据是否正确有效. 1 数据类型 数据类型的选用原则 : 够用就行,尽 ...