lower_bound返回的是,二分查找一个数组或者什么什么里面第一个,大于等于它的位置
比如0 2 3 4 4 4 5
返回的是3 (第一个4的位置)
upper_bound返回的是第一个大鱼它的位置
比如是6(是5的位置)
数组里面,a本来表示的是最开头那个地方,a[0]前面的位置
区间表示的时候一般都是左闭右开的
最基本的表示方法是:(a,a+n,rec)-a
返回的是位置,也就是门牌号,左闭右开的区间里面0到n-1的数据进行排序(长度是n),但是后面就写成了n
(是娶不到n的)
减去a就是最开始的位置,返回的是一个差值
set里面也是,.begin()是最开头的位置
.end()--才是最后一个位置,区间是左闭右开的。
数组,vector都可以这样用,但是set查找的时候是个树状结构,虽然set也可以用s.begin() s.end()直接找,但是树状的是不一样的,每次用的时候要拍扁了,答案不会错,但是拍扁的时候需要O(n)的复杂度,最后导致很慢,人们在set里面手写了一个lower——bound,可以直接用。s.lower_bound(y),返回的是一个位置(在set里面找东西也会返回一个位置) ,获取真的东西的时候需要使用*来访问。
vector<int> g ;
for(int i=0;i>g.size()-1;i++)
当g.size()是0的时候也会有问题
因为这个g.size是unsigned int 是无符号的 没有符号的 0-1不是-1 是一堆4.....几几几的奇怪的数字
这个奇怪的数字.. 所以别这么写-.-
==========================
...烦死了.....
机房真的什么都干不下去...
我不知道是我把心思都放在“啊好吵啊”上面还是自己真的太脆弱
……
就这样吧
很多时候即使不是这样时间还是呼噜呼噜都过去了
我也没办法
真的
既然都浪费了这么久那就一直浪费下去好了......
.....