出現了!sort和二分混合雙打!

2022-07-12 04:03:07 字數 1062 閱讀 7256

雖然 miss medusa 到了北京,領了科技創新獎,但是他還是覺得不滿意。原因是:他發現很多人都和他一樣獲了科技創新獎,特別是其中的某些人,還獲得了另乙個獎項——特殊貢獻獎。而越多的人獲得了兩個獎項,miss medusa就會越眼紅。於是她決定統計有哪些人獲得了兩個獎項,來知道自己有多眼紅。

第一行兩個整數 n, m,表示有 n個人獲得科技創新獎,m個人獲得特殊貢獻獎。

第二行 n個正整數,表示獲得科技創新獎的人的編號。

第三行 m個正整數,表示獲得特殊貢獻獎的人的編號。

輸出一行,為獲得兩個獎項的人的編號,按在科技創新獎獲獎名單中的先後次序輸出。

思路:

先將兩組資料分別輸入,然後將第三行輸入的資料(貢獻獎獲得者的序號)進行sort排序(為二分做準備),接著就可以進行二分查詢出相應創新獎的最終位置,此時再將最終位置代表的數與創新獎獲得者的序號比較是否一致,一致則將其儲存進答案陣列,最後遍歷完畢將答案陣列按序輸出便可;

本質上這是一道模板應用題,其sort為自帶函式,而二分查詢則按照之前所寫的二分模板套用即可(在此題目中,由於沒有重複資料,因此套用查詢左邊界模板或是查詢右邊界模板均可找到最終位置);非常要注意這題由於資料量過大,因此陣列也應當開的大一些,當我開的陣列只比題目所給要求大10時(即100010),有兩個測試點是不能過的,而當我將陣列開為1000100時,卻可以將這兩個測試點過掉,具體原因我也不是很清楚,下次遇見資料量較大的情況時,有條件的應該將陣列開的大一些;

**:

#include

using namespace std;

#define int long long

int ans[1000100];

int k=1;

signed main()

for(int i=1;i<=m;i++)

sort(b+1,b+1+m);

for(int i=1;i<=n;i++)

if(b[l]==x)

}for(int i=1;i<=k-1;i++)

}

String Game (二分 桶 雙指標)

題目鏈結 題意 給乙個長為len的字串str1和乙個長度不超過str1的字串str2,以及乙個操作序列,每個操作a i 代表刪去str1中的第a i 個字元。問操作最多進行到第幾步,str2不再是str1的子串行?刪去某字元後後str1剩餘字元的下標保持不變。保證最初的str2是str1的子串行 通...

二分查詢和二分答案

1.解釋 優點 查詢速度快。缺點 待查表為有序表。4.時間複雜度 o log n 5.示例 p2249查詢 include include using namespace std long long n,m,a 1000005 b 100005 l,r,mid,cnt,x intmain for i...

二分 整數二分和浮點數二分

一定是單調的才可以二分。找中間點 判斷是否滿足check函式 此函式需要自己根據題意調整,假設紅色區域為滿足check函式,說明mid在紅色區域內,此時要在mid到r之間找,l mid,否則r mid 1。由於此時l mid 所以中間點應為 l r 1 2 中間點mid l r 2 mid l r ...