模板
找出最左邊的乙個,最右邊的乙個,和長度
注意找左位置時要判斷:
1>不可以是字串結尾,不然為0或為空
2>不可以不等於key
#include#include#include
using
namespace
std;
intn,m;
const
int n=100003
;int
d[n];
intmain()
int pos2=upper_bound(d+pos1+1,d+n+1,x)-d;
printf(
"%d %d %d\n
",pos1,pos2-1,pos2-pos1);
}return0;
}
例題1阿彌陀佛數數遊戲
n個數字(n<=500000),k(k<=500000)個問題,
每個問題詢問從l到r中,到底有多少個數字是key值?
資料都是int可以儲存的
神仙思路:
題目雖然有兩個關鍵字,但是只求第乙個關鍵字相等的情況,所以可以直接sort
sort以後找到相等區間,再去搞第二關鍵字就好
#include#include#include
using
namespace
std;
intn,k;
const
int n=500003
;struct
node
}d[n];
intmain()
}return0;
}
例題2曬衣服
1>貪心
眾所周知,堆比sort快(除了我)
#include#include#include
using
namespace
std;
priority_queue q;
intn,a,b;
intmain()
printf(
"%d\n
",t);
return0;
}
2>二分搜尋答案
二分快速確認答案範圍
#include#include#include
#include
using
namespace
std;
intn,a,b;
const
int n=500000
;int d[n+3
];bool check(int
tm)
return
true;}
intmain()
printf(
"%d\n
",l);
return0;
}
例題3穿越七彩虹
小數的二分
#include#include#include
#include
using
namespace
std;
double
h,ed;
double x[10],r[10
];struct
node
}d[10];
bool check(double
ch) sort(d+1,d+8
);
double rr=d[1
].r ;
if(d[1].l >0) return
false
;
for(int i=2;i<=7;i++)
return rr>=ed;
}int
main()
printf(
"%.2lf
",l);//四捨五入輸出兩位小數
return0;
}
例題4矩形分割
平面上有乙個大矩形,其左下角座標(0,0),右上角座標(r,r)。大矩形內部包含一些小矩形,小矩形都平行於座標軸且互不重疊。所有矩形的頂點都是整點。要求畫一根平行於y軸的直線x=k(k是整數) ,使得這些小矩形落在直線左邊的面積必須大於等於落在右邊的面積,且兩邊面積之差最小。並且,要使得大矩形在直線左邊的的面積盡可能大。注意:若直線穿過乙個小矩形,將會把它切成兩個部分,分屬左右兩側。
#include#include#include
using
namespace
std;
intr,n;
const
int r=1000003;//
注意:我將面積落在偏右節點上
long
long cf[r],sum[r];//
cf是i項減去i-1項
//sum是前i項的面積之和 ,則sum的有效部分是[2,r],第一項面積為0
intmain()
long
long nw=0;//
差分序列前i項的和
for(int i=1;i<=r;i++)
long
long mid=sum[r]-(sum[r]>>1
);
int pos=lower_bound(sum,sum+r+1,mid)-sum;
while(pos1]) pos++;
int pos2=upper_bound(sum+1,sum+r+1,mid)-sum;
if(pos2 && sum[pos2-1]>=mid) pos2--; //
注意:這兩段其實是不一樣的,第二段中的sum[pos2]雖然一定大於了mid,是最小差值,但是不一定是最後乙個最小差值
//再加上乙個向後尋找就好了
printf("
%d\n
",pos);
return0;
}
例題5有道搜尋框
//注意呀:字串可以都看作數
//只是比大小是左對齊形式罷了
#include#include
#include
#include
using
namespace
std;
intn,q;
const
int n=10003
;string
s[n],ask;
intpos;
intmain()
else
}
return
0;}
python刷題 二分查詢
def binarysearch nums,target left 0 right len nums 1 while left right mid right left 2 if nums mid target return true elif nums mid target left mid 1 ...
搜尋1 線性搜尋和二分搜尋
目錄 搜尋1線性搜尋 示例 二分搜尋 示例 總結搜尋 就是在資料集合中尋找給定的關鍵字的位置或判斷其有無。基本的搜尋演算法有如下三種,分別為線性搜尋,二分搜尋,雜湊法。下面我們先學習前兩者。線性搜尋就是從頭順次訪問各元素,檢查該元素是否與目標值相等。線性搜尋的演算法效率很低,但是用於各種形式的資料。...
LeetCode刷題總結 二分查詢
leetcode 刷題總結 二分查詢 二分主要是形成自己的 風格就可以了。常用兩種風格 現在偏向於風格一實現了 leetcode35.搜尋插入位置 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。這個實際上就是手動實現lower...