有兩個正整數數列,元素個數分別為n和m。從兩個數列中分別任取乙個數相乘,這樣一共可以得到n*m個數,詢問這n*m個數中第k小數是多少。
1<=n,m<=2∗
105, 1<=k<=n*m
先將兩個陣列排序。
二分答案ans。
對於a[i]找到最大的j使得a[i]*b[j]<=ans。
那麼對於a[i+1]的j一定小於對於a[i]的j,這個我們暴力掃一遍,就是o(n+m)的。
總複雜度是o(
(n+m
)∗lo
g10182
) 考場時我沒有想到這樣的做法,我想到的是o(n log n log m)的,然後也加了超級多的優化,直接過了。
code:
#include
#include
#define ll long long
#define fo(i, x, y) for(int i = x; i <= y; i ++)
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))
using namespace std;
const int maxn = 200005;
int n, m, v, a[maxn], b[maxn], c[maxn], d[maxn], e[maxn];
ll u, ans, ma, mb;
void read(int &x)
bool pd(ll x)
s += e[i];
rr = e[i];
if(s >= u)
}return0;}
int main() else
}printf("%lld\n", ans);
}
Noip2017提高組 乳酪
noip 2017 提高組 不怎麼難啦 思路如下 首先先寫乙個函式判斷兩個洞是否相連,即兩洞之間距離是否小於等於球直徑 注意是直徑 struct dong dong p 1001 bool pd dong a,dong b 第二個難點在於如何判斷是否可以穿過乳酪,對此我們可以模擬老鼠鑽洞 run函式...
NOIP2017提高組 列隊
noip2017提高組 day2 t3 sylvia 是乙個熱愛學習的女孩子。前段時間,sylvia 參加了學校的軍訓。眾所周知,軍訓的時候需要站方陣。sylvia 所在的方陣中有 n m 名學生,方陣的行數為 n,列數為 m 為了便於管理,教官在訓練開始時,按照從前到後,從左到右的順序給方陣中的學...
NOIP 2017 提高組 寶藏
傳送門 參與考古挖掘的小明得到了乙份藏寶圖,藏寶圖上標出了 n nn 個深埋在地下的寶藏屋,也給出了這 n nn 個寶藏屋之間可供開發的 m mm 條道路和它們的長度。小明決心親自前往挖掘所有寶藏屋中的寶藏。但是,每個寶藏屋距離地面都很遠,也就是說,從地面打通一條到某個寶藏屋的道路是很困難的,而開發...