學長 拜託不要插進來...♡

發布時間: March 10, 2021, 2:43 a.m.   最後更新時間: Sept. 21, 2024, 5:56 p.m.   時間限制: 5000ms   記憶體限制: 128M

每天中午福利社總是擠滿了一群青春的肉♂體,假設今天有$n$個人,我們可以把排隊的隊伍考慮成一個序列,每個人的編號分別是$1, 2, ...n$。

現在所有人都被賦予了一張寫著正整數的號碼牌,第$i$個人的編號為$a_i$,也就是可以進去的順序,每個人的號碼牌都不一樣,大家都乖乖地按照號碼牌的順序排好,不過有些人可能會提早離開隊伍,所以序列中的編號不一定是連續正整數

現在有一個壞心的學長ㄐㄐ製造了假的號碼牌來插隊,他想要知道用這個號碼牌狠狠地插進隊伍裡的話,會有幾個人在他前面?為了避免插隊被發現,ㄐㄐ學長當然會插進可以使得隊伍還是按照號碼牌順序排好的適當的位置。

因為ㄐㄐ學長的號碼牌是假的,所以有可能隊伍裡有個人的號碼牌跟ㄐㄐ學長一樣,此時ㄐㄐ學長會排在他的前面。

ㄐㄐ學長總共有$Q$張號碼牌,第$i$張號碼牌編號為$x_i$,所以對於每張號碼牌你都要回答有幾個人會在他的前面。每筆詢問都是獨立的,也就是說ㄐㄐ學長都只會詢問"如果"他插隊的情況下,他不會真的插進去。

$n (1\le n\le 10^5)$
$a_1\ a_2\ a_3...\ a_n(1\le a_i\le 10^9, \forall 1\le i\lt n, a_i\lt a_{i + 1})$
$Q (1\le Q\le 10^5$
$x_1$
$x_2$
$x_3$
...
$x_Q(1\le x_i\le 10^9)$

輸出$Q$行,第$i$行代表第$i$張號碼牌的情況下有幾個人會在ㄐㄐ學長的前面

複製範例
10
2 3 5 6 10 12 13 18 20 21
5
1
6
4
22
100
0
3
2
10
10

第一張號碼牌會使得ㄐㄐ學長排在最前面,所以0個人在他前面。

第二張號碼牌會使得ㄐㄐ學長排在拿著6的那個人的前面,所以會有三個人在ㄐㄐ學長前面。

binary search

原創