題目鏈結
給定三個整數陣列
a = [a1, a2, … an],
b = [b1, b2, … bn],
c = [c1, c2, … cn],
請你統計有多少個三元組(i, j, k) 滿足:
1 <= i, j, k <= n
ai < bj < ck 輸入
第一行包含乙個整數n。
第二行包含n個整數a1, a2, … an。
第三行包含n個整數b1, b2, … bn。
第四行包含n個整數c1, c2, … cn。
輸出乙個整數表示答案
樣例
311
1222
333
27
提示
資料規模
對於30%的資料,1 <= n <= 100
對於60%的資料,1 <= n <= 1000
對於100%的資料,1 <= n <= 100000 0 <= ai, bi, ci <= 100000
解題思路:本題的乙個重點是要想到通過中間的陣列進行比較,找出a中比b大的,找出c中比b小的。具體來說有兩種方法,字首和,二分。都要注意的一點是儲存結果的變數要用long long
首先看字首和o(n)
#include
#include
using
namespace std;
int a[
100010]=
,b[100010]=
,c[100010]=
;int suma[
100010]=
,sumc[
100010]=
;int
main
(void
)for
(int i =
1;i <
100010
;i++
)for
(int i =
1;i <= n;i++
)scanf
("%d"
,&b[i]);
for(
int i =
1;i <= n;i++
)for
(int i =
1;i <
100010
;i++
)int ans =0;
for(
int i =
1;i <= n;i++
)printf
("%d"
,ans)
;return0;
}
二分o(nlogn)
這裡用到兩個函式,lower_bound找出a中第乙個大於等於當前b中元素的下標。upper_bound找出c中第乙個大於當前b中元素的下標.注意這兩個的區別。
#include
#include
#include
using
namespace std;
int a[
100010]=
,b[100010]=
,c[100010]=
;int
main
(void
) cout << ans;
return0;
}
藍橋杯 遞增三元組 字首和 模擬
題目描述 給定三個整數陣列 a a1,a2,an b b1,b2,bn c c1,c2,cn 請你統計有多少個三元組 i,j,k 滿足 1 i,j,k n ai輸入格式 第一行包含乙個整數 n。第二行包含 n 個整數 a1,a2,an。第三行包含 n 個整數 b1,b2,bn。第四行包含 n 個整數...
藍橋杯 遞增三元組
題目鏈結 直接暴力o n 3 o n 3 o n3 顯然超時。將三個陣列排序,遍歷b bb陣列,二分找到a aa中小於b i b i b i 的個數a aa,找到c cc中大於b i b i b i 的個數c cc,ans ansan s a c a ca c。時間複雜度,排序o n log n o...
藍橋杯 遞增三元組
給定三個整數陣列 a a1,a2,an b b1,b2,bn c c1,c2,cn 請你統計有多少個三元組 i,j,k 滿足 1.1 i,j,k n 2.ai bj 輸入格式 第一行包含乙個整數n。第二行包含n個整數a1,a2,an。第三行包含n個整數b1,b2,bn。第四行包含n個整數c1,c2,...