筆試 今日頭條 樹狀陣列查詢

2022-08-05 04:00:23 字數 1421 閱讀 6842

【題目描述】

給定兩個長度為 n 的整數數列 a 和 b。再給定 q 組查詢,每次查詢給出兩個整數 x 和 y,求滿足 ai >= x 且 bi >= y 這樣的 i 的數量。

輸入格式

第一行給定兩個整數 n 和 q。

第二行給定數列 a,包含 n 個整數。

第三行給定數列 b,包含 n 個整數。

接下來 q 行,每行兩個整數 x 和 y,意義如上所述。

輸出格式

對於每組查詢,輸出所求的下標數量。

輸入樣例

3 23 2 4

6 5 8

1 14 8

輸出樣例

資料規模

對於 30% 的資料,1 <= n, q <= 100。

對於 100% 的資料,1 <= n, q, ai, bi <= 10^5。

題解

想用暴力解法是可以通過一些的, 但是複雜度 o(n^2), 對10^5就不行了。

樹狀陣列的做法複雜度平均在o(nlogn)。

#include using

namespace std;//

先以a對pair (a, b)排序, 樹狀陣列維護i以後的比y大的個數

const

int maxn = 100000 + 10

;struct

node

}p[maxn], q[maxn];

inta[maxn];

intb[maxn];

int lowbit(int

i) void add(int a, int

i) }

int sum(int

i)

return

res;

}int

main()

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

add(

1, p[i].y);

sort(q, q+m);

int k = 0

;

for (int i = 0; i < n; i++) }}

if (k >=m)

break

; }

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

printf(

"%d\n

", b[i]);

return0;

}

references

線段樹原理ppt(劉汝佳)

今日頭條筆試

問題描述 給定乙個段落,由 n 個句子組成。第 i 個句子的長度為 l i 包含的單詞個數為 w i 句子不包含任何除字母和空格 外的符號。每個句子內部,含有若干個單詞,由空格 分隔。句子不會包含連續的空格。隨後給定 m 個查詢,每個查詢包含乙個句子,需要在段落中尋找相同單詞數量最多的句子。重複的單...

2017 08 22 今日頭條筆試題

有乙個值得分享的地方,是x排序之後對應y的問題 我用了乙個很大的陣列,以x為索引,y為陣列值,不需要用到map。其實也是因為我懶不想去學map操作了,下次試試用map。include include include using namespace std int main cin n x.clear...

或與加(今日頭條筆試)

給定 x,k 求滿足 x y x y 的第 k 小的正整數 y 是二進位制的或 or 運算,例如 3 5 7。比如當 x 5,k 1時返回 2,因為5 1 6 不等於 5 1 5,而 5 2 7 等於 5 2 7。輸入描述 每組測試用例僅包含一組資料,每組資料為兩個正整數 x k。滿足 0 x k ...