二分

二分算法模板

int bsearch(int *a, int x, int y, int v)
{
int mid;
while(x < y)
{
mid = (x + y) / 2;
if(a[mid] == v)
return mid;
if(a[mid] > v)
y = mid;
else
x = mid + 1;
}
return -1;
}

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

lower_bound

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

upper_bound

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

int lowerBound(int x){
int l=1,r=n;
while(l<=r){
int mid=(l+r)>>1;
if (x>g[mid]) l=mid+1;
else r=mid-1;
}
return l;
}
int upperBound(int x){
int l=1,r=n;
while(l<=r){
int mid=(l+r)>>1;
if (x>=g[mid]) l=mid+1;
else r=mid-1;
}
return l;
}

最长上升子序列LIS

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

int cal(int *b)
{
vector<int> s;
for(int i = 0; i < n ;i++)
{
if(s.empty()) s.push_back(b[i]);
else
{
vector<int>::iterator it = upper_bound(s.begin(), s.end(), b[i]);
if(it == s.end()) s.push_back(b[i]);
else
*it = b[i];
}
}
return s.size();
}

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

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

#include <bits/stdc++.h>
using namespace std;
const int MAXX=100000+5;
const int INF=INT_MAX; int a[MAXX],dp[MAXX]; // a数组为数据,dp[i]表示以a[i]结尾的最长递增子序列长度 int main()
{
int n;
while(cin>>n)
{
for(int i=0; i<n; i++)
{
cin>>a[i];
dp[i]=1; // 初始化为1,长度最短为自身
}
int ans=1;
for(int i=1; i<n; i++)
{
for(int j=0; j<i; j++)
{
if(a[i]>a[j])
{
dp[i]=max(dp[i],dp[j]+1); // 状态转移
}
}
ans=max(ans,dp[i]); // 比较每一个dp[i],最大值为答案
}
cout<<ans<<endl;
}
return 0;
}

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

最新文章

  1. Oracle 数据库知识汇总篇
  2. 安装ArcGIS Desktop 9.3
  3. Markdown编辑器测试
  4. 微信小程序-提示框
  5. 《VB语言程序设计(第3版)》总结
  6. Beta冲刺---Day2
  7. C#与js的各种交互
  8. java之io之File类的list()方法过滤目录的使用
  9. wince6.0 开机启动定制的程序
  10. 为什么Android没有iOS那么顺滑
  11. Qt mac QMYSQL(动态加载插件QPluginLoader的用法)
  12. [Swift]LeetCode561. 数组拆分 I | Array Partition I
  13. VScode查找替换常用正则表达式
  14. canvas动态修改宽高问题
  15. requests 获取百度推广信息
  16. L1-061 新胖子公式
  17. Linux之增加系统调用[内核编译]
  18. object oriented programming : class application
  19. 【Web】Web开发中的异常处理方案
  20. 简单快捷使用Git

热门文章

  1. JavaWeb入门_模仿天猫整站Tmall_JavaEE实践项目
  2. charles使用说明(基于mac)
  3. sql-实现select取行号、分组后在分组内排序、每个分组中的前n条数据
  4. 【HDU - 3085】Nightmare Ⅱ(bfs)
  5. python的简介与简单使用
  6. git简介 http://msysgit.github.io/
  7. Innovus Lab和Lab Guide下载地址 | Innovus教程 - Flow系列 - 数据准备
  8. C语言学习书籍推荐《C语言程序设计 现代方法(第2版)》下载
  9. 数据结构-堆栈和队列最简单的实现(Python实现)
  10. Mac上Ultra Edit的激活