lower_bound

lower_bound与upper_bound函数

╄→尐↘猪︶ㄣ 提交于 2020-02-03 12:29:02
lower_bound与upper_bound函数 1.说明 lower_bound,upper_bound使用的前提是数组序列有序(升序降序均可) lower_bound找出序列中第一个大于等于x的数 upper_bound找出序列中第一个大于x的 数 2.示例 # include <algorithm> # include <iostream> using namespace std ; const int maxN = 10 ; int main ( ) { int arr [ maxN ] = { 23 , 23 , 13 , 12 , 3 } ; sort ( arr , arr + 5 ) ; for ( int i = 0 ; i < 5 ; i ++ ) cout << arr [ i ] << " " ; cout << endl ; //lower_bound,upper_bound使用的前提是数组序列有序(升序降序均可) //lower_bound找出序列中第一个大于等于x的数 int index1 = lower_bound ( arr , arr + 5 , 23 ) - arr ; //返回下标 cout << index1 << endl ; //upper_bound找出序列中第一个大于x的 数 int index2 = upper_bound (

lower_bound和upper_bound的用法

大兔子大兔子 提交于 2020-02-03 09:37:10
二分查找算法可以解决最简单的二分查找问题:a数组单调递增,并且其中没有重复的数值。我们遇到的实际问题可能就没有这么简单,可能会有重复的数值。比如a数组里有3个5。这时我们查找5就有一个问题:到底返回哪一个5的下标? 为了解决这些问题,C++ STL提供了两个特别好用的函数:lower_bound()和uppper_bound()。假设a是一个数组,n是数组长度,lower_bound(a, a+n, x)返回数组a[0]~a[n-1]中,大于等于x的数中,最小的数的指针。由于指针可以通过加减算偏移量,所以我们再减去a(数组名会被隐式转换成指针),就得到了相应的下标。我们看一下下面的例子,假设我们在a数组中找3这个数。 左边是a数组,当然这个a数组必须递增的,不然lower_bound()会出错。其中标红的是大于等于3的数。右边是lower_bound()的返回值减去a,是标红这些数里最小的一个的下标。注意最后一个例子,如果a数组中一个大于等于3的都没有,会返回数组长度n。 另一个函数叫做upper_bound()。同样假设a是一个数组,n是数组长度,upper_bound(a, a+n, x)返回数组a[0]~a[n-1]中,大于x的数中,最小的数的指针。 注意lower_bound是“大于等于”,upper_bound是“大于”。 我们看一下下面的例子

【题解】P1020 导弹拦截

心已入冬 提交于 2020-02-02 01:26:49
【题解】 P1020 导弹拦截 从n^2到nlogn 第二问就是贪心 第一问: 简化题意:求最长不下降子序列 普通n^2: for (int i = 1; i <= n; i++) for (int j = 1; j < i; j++) if(a[j] >= a[i]) f[i] = max(f[i], f[j] + 1); cout << f[n]; 另一种n^2级,可能快一点点(还没交,不知对不对) f[0] = 1; for (int i = 1; i <= n; i++) { if(a[i] == 0) continue; f[a[i]] = f[a[i] - 1] + 1; for (int j = a[i]; j <= max_ai; j++) f[j] = max(f[j], f[a[i]]); } cout << f[max_ai] << endl; 接下来就是大佬讲的nlogn 题解 (@w1049344862) 首先是upper_bound() 和lower_bound()的用法 然后是神奇的栈操作 w1049344862曰: O(nlogn)求出最长不上升子序列的长度 (即一套系统最多拦截数) 1.实现方式 首先我们需要一个数组a,存储从第1个到第n个导弹的高度 然后一个数组d(其实是个栈),存储不上升序列 把a中的每个元素挨个加到d里面:

如何使用python操作kudu

大兔子大兔子 提交于 2020-01-14 02:51:14
文章目录 环境准备 C++ Client Libraries Ubuntu Centos kudu-python 首次安装 复用安装 使用 总结 本文只讨论如何使用kudu提供的Python相关api,不涉及kudu自身环境的搭建和配置。 环境准备 注意:在安装kudu-python之前需要先确保已经配置好了kudu的C++ Client Libraries,并且不同的操作系统之间的依赖是需要分别配置的,这里只讨论Ubuntu和Centos。 C++ Client Libraries 详情请参考官网: kudu C++ Client Libraries Ubuntu sudo apt-get -y install autoconf automake curl flex g++ gcc gdb git \ krb5-admin-server krb5-kdc krb5-user libkrb5-dev libsasl2-dev libsasl2-modules \ libsasl2-modules-gssapi-mit libssl-dev libtool lsb-release make ntp \ openjdk-8-jdk openssl patch pkg-config python rsync unzip vim-common git clone https:/

ODT(区间覆盖问题)

眉间皱痕 提交于 2019-12-04 04:58:17
解释:先留坑 题目:https://www.cometoj.com/contest/73/problem/D?problem_id=4120 #include<bits/stdc++.h> using namespace std; #define se set<aa> #define it iterator #define lowbit(x) (x&(-x)) typedef long long ll; const int M=5e5+5; int n,m,q; struct ope{ ll l,r,val; }a[M]; struct quer{ ll l,r,id; }b[M]; struct aa{ ll l,r,val,id; }; set<aa>s; bool cmp(quer x,quer y){ return x.r<y.r; } bool operator <(aa a,aa b) { return a.r < b.r; } ll tree[M],ans[M]; void add(ll x,ll y) { if(x == 0) return; for(;x <= n; x += lowbit(x)) tree[x] += y; } ll Sum(ll x) { ll ans = 0; for(; x > 0; x -= lowbit(x)) ans += tree

Comet OJ - Contest #14题解

99封情书 提交于 2019-12-04 01:42:47
Contest14的本质:区间覆盖+Tarjan( A 把距离公式两边平方即可 注意要long long code #include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #define fo(a,b,c) for (a=b; a<=c; a++) #define fd(a,b,c) for (a=b; a>=c; a--) using namespace std; int x[100001]; int y[100001]; int n,i,j,k,l,X,Y,R,ans; int main() { // freopen("a.in","r",stdin); scanf("%d%d%d%d",&n,&X,&Y,&R); fo(i,1,n) scanf("%d%d",&x[i],&y[i]); fo(i,1,n) if (((long long)(x[i]-X)*(x[i]-X)+(long long)(y[i]-Y)*(y[i]-Y))<=(long long)R*R) ++ans; printf("%d\n",ans); } B 显然p和k是位置最靠边的两个 考虑一下i和n的位置(靠左/靠右/左右) code 比较丑 #include

How to convert a 16 bit to an 8 bit image in OpenCV?

匿名 (未验证) 提交于 2019-12-03 08:44:33
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 由 翻译 强力驱动 问题: I have a 16bit grayscale image and I want to convert it to a 8bit grayscale image in OpenCV for python to use it with various functions (like findContours etc.). Is it possible to do it in python or I have to switch to C++? 回答1: You can use numpy conversion methods as an OpenCV mat is a numpy array. This works: img8 = ( img16 / 256 ). astype ( 'uint8' ) 回答2: You can do this in Python using NumPy by mapping the image trough a lookup table. import numpy as np def map_uint16_to_uint8 ( img , lower_bound = None , upper_bound = None ):

Finding any element with specific first coordinate in set&lt;pair&gt; &gt;

匿名 (未验证) 提交于 2019-12-03 08:36:05
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I'm trying to figure out the following problem. Suppose I have the following container in C++: std::set<std::pair<int, int> > my_container; This set (dictionary) is sorted with respect to the order < on std::pair<int, int> , which is the lexicographic order. My task is to find any element in my_container that has the first coordinate equal to, say x , and return the iterator to it. Obviously, I don't want to use find_if , because I need to solve this in logarithmic time. I would appreciate any advice on how this can be done 回答1: You can use

离散化小记

你说的曾经没有我的故事 提交于 2019-12-03 04:23:55
感觉现在写个啥都得搞离散化orz 目前已知的离散化方式: 1.手写多累,用map啊(可能会被卡掉) map<int,int>即可 2.vector离散化(应该没有手写快,不过一般不会被卡) 我们将要离散化的所有数存进vector里,排序。查询一个数被离散化之后的值用lower_bound即可 for(int i=1;i<=n;i++) a[i]=read(),vec.push_back(a[i]);//vec就是定义的vector sort(vec.begin(),vec.end()); for(int i=1;i<=n;i++) a[i]=lower_bound(vec.begin(),vec.end(),c)-vec.begin()+1;//下标从1开始 3.参照vector离散化的思路,手写离散化 就是把所有元素存进一个数组里(在你知道上限的情况下),排序,手写lower_bound即可 int n,be[N],ae[N],t;//N根据题目确定 int lower_bound(int kkk) { int ll=1,rr=t; while(ll<=rr) { int mid=(ll+rr)>>1; if(ae[mid]==kkk) return mid; if(ae[mid]>kkk)rr=mid-1; else ll=mid+1; } if(ae[ll]>kkk)ll--

map::lower_bound() equivalent for python&#039;s dict class?

匿名 (未验证) 提交于 2019-12-03 01:45:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I am writing some code that requires me to fetch the lower bound of a key (for simplicity, ignore keys that lie below the smallest key in the collection). In C++, using std::map (as the most comparable data type) I would simply use the lower_bound() to return the iterator. My Pythonfoo is not that great, but I am guessing that (in case Python does not already have a way of doing this), this would be a good use of a lambda function ... What is the Pythonic way of retrieving the lower bound key for a given index? In case the question is too