開啟章節選單
B. Number of Smaller
題目內容
給予兩個陣列,均為已排序遞增陣列,個別長度為 和 ,對於第二個陣列的每個元素,找到第一個陣列中,比目前元素小的元素數。
輸入 : 第一行有兩整數 和 , 代表兩陣列長度。第二行有 個整數 ,代表第一個陣列的元素,第三行有 個整數 ,代表第一個陣列的元素
輸出 : 輸出 個數字,代表 與第一個陣列中,比 小的元素數。
解題想法
本題目是章節中所提到的進階題,尚不了解者可以返回閱讀
在此宣告兩陣列 , ,個別長度為 和 ,並且宣告一變數 ,用於紀錄與第一個陣列中,比目前元素小的元素數。
因此,在走訪 陣列所有元素時,可以利用一 while
迴圈來檢測 是否較目前元素小,否則中止此迴圈。
注意
在輸入元素至兩陣列 和 後,必須將 設置為比最大值還大的值,即
在每次迴圈的最後,都要輸出 now
, 代表第一個陣列中,比 小的元素數,並且輸出保持嚴格比對。
範例程式
#include <bits/stdc++.h> #define LL long long using namespace std; LL n, m, a[200005], b[200005], now = 0; int main() { cin >> n >> m; for (int i = 0; i < n; i++) cin >> a[i]; for (int i = 0; i < m; i++) cin >> b[i]; a[n] = INT_MAX; for (int i = 0; i < m; i++) { while (a[now] < b[i]) now++; if (i) cout << ' '; cout << now; } cout << '\n'; return 0; }