【題目描述】
給定兩個長度為 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 usingnamespace 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 ...