藍橋杯 遞增三元組(第九屆第六題)

2021-09-12 01:43:43 字數 1537 閱讀 6880

給定三個整數陣列

a = [a1, a2, ... an], 

b = [b1, b2, ... bn], 

c = [c1, c2, ... cn],

請你統計有多少個三元組(i, j, k) 滿足:

1. 1 <= i, j, k <= n  

2. ai < bj < ck  

【輸入格式】 

第一行包含乙個整數n。

第二行包含n個整數a1, a2, ... an。

第三行包含n個整數b1, b2, ... bn。

第四行包含n個整數c1, c2, ... cn。

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

對於60%的資料,1 <= n <= 1000 

對於100%的資料,1 <= n <= 100000 0 <= ai, bi, ci <= 100000 

【輸出格式】

乙個整數表示答案

【樣例輸入】

31 1 1

2 2 2

3 3 3

【樣例輸出】

27 資源約定:

峰值記憶體消耗(含虛擬機器) < 256m

cpu消耗  < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入...」 的多餘內容。

注意:main函式需要返回0;

只使用ansi c/ansi c++ 標準;

不要呼叫依賴於編譯環境或作業系統的特殊函式。

所有依賴的函式必須明確地在原始檔中 #include

不能通過工程設定而省略常用標頭檔案。

提交程式時,注意選擇所期望的語言型別和編譯器型別。

將三元組a,b,c排序,對於中間陣列b的乙個元素,找到a中小於這個元素的個數和c中大於這個元素的個數,相乘,結果為b中當前元素產生的三元組個數,遍歷b中的每個元素得到的結果相加得到最終結果。我們這裡尋找採用了stl中的lower_bound和upper_bound函式。

forwarditer lower_bound(forwarditer first, forwarditer last,const _tp& val)演算法返回乙個非遞減序列[first, last)中的第乙個大於等於值val的位置。

forwarditer upper_bound(forwarditer first, forwarditer last, const _tp& val)演算法返回乙個非遞減序列[first, last)中第乙個大於val的位置。

lower_bound返回a中第x個大於等於b[i]中的元素,第x元素之前的都是小於b[i]的,有x個。

upper_bound返回c中第x個大於b[i]中的元素,x之前的都是小於等於b[i]的,有x個,所以大於b[i]的有n-x個。

#includeusing namespace std;

const int maxn=100000+10;

int a[maxn],b[maxn],c[maxn];

int main()

cout<}

藍橋杯第九屆省賽 第六題 遞增三元組

給定三個整數陣列 a a1,a2,an b b1,b2,bn c c1,c2,cn 請你統計有多少個三元組 i,j,k 滿足 1.1 i,j,k n 2.ai bj ck 輸入格式 第一行包含乙個整數n。第二行包含n個整數a1,a2,an。第三行包含n個整數b1,b2,bn。第四行包含n個整數c1,...

第九屆藍橋杯省賽第六題 遞增三元組

給定三個整數陣列 a a1,a2,an b b1,b2,bn c c1,c2,cn 請你統計有多少個三元組 i,j,k 滿足 1.1 i,j,k n 2.ai bj ck 3 輸入格式 第一行包含乙個整數n。第二行包含n個整數a1,a2,an。第三行包含n個整數b1,b2,bn。第四行包含n個整數c...

遞增三元組(第九屆藍橋杯C )

給定三個整數陣列 a a1,a2,an b b1,b2,bn c c1,c2,cn 請你統計有多少個三元組 i,j,k 滿足 1 i,j,k n ai第二行包含 n 個整數 a1,a2,an。第三行包含 n 個整數 b1,b2,bn。第四行包含 n 個整數 c1,c2,cn。輸出格式 乙個整數表示答...