給定三個整數陣列
a=[a1,a2,…an],
b=[b1,b2,…bn],
c=[c1,c2,…cn],請你統計有多少個三元組 (i,j,k)
滿足:1≤i,j,k≤n
ai本題的關鍵在於發現每個遞增三元組中a[i]和c[k]都要受b[j]約束,故應該通過列舉b[j]計算三元組的個數。同時本題的易錯點是統計各個值出現次數的時候,最後乙個元素的下標由資料最大值決定,統一用資料範圍最大值就好。
ac**:
#include
#include
const
int n=
100010
;typedef
long
long ll;
int n;
int a[n]
,b[n]
,c[n]
;int cnt[n]
,s[n]
;int anum[n]
,cnum[n]
;int
main()
for(
int i=
1;i<=n;
++i)
for(
int i=
1;i<=n;
++i)
//統計a陣列中各個值出現的次數
for(
int i=
1;i<=n;
++i)
++cnt[a[i]];
//計算a陣列中各個值出現次數的字首和
//因為值的範圍是1~100001,cnt的最後一項為cnt[100001]
for(
int i=
1;i++i) s[i]
=s[i-1]
+cnt[i]
;//anum[i]中儲存a中小於b[i]的數的個數
for(
int i=
1;i<=n;
++i) anum[i]
=s[b[i]-1
];memset
(cnt,0,
sizeof
(cnt));
memset
(s,0
,sizeof
(s))
;for
(int i=
1;i<=n;
++i)
++cnt[c[i]];
for(
int i=
1;i++i) s[i]
=s[i-1]
+cnt[i]
;//cnum[i]中儲存c中大於b[i]的數的個數
for(
int i=
1;i<=n;
++i) cnum[i]
=s[n-1]
-s[b[i]];
ll ans=0;
//統計答案
for(
int i=
1;i<=n;
++i) ans+
=(ll)anum[i]
*cnum[i]
;printf
("%lld"
,ans)
;return0;
}
遞增三元組
遞增三元組 描述給定三個整數陣列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,...
遞增三元組
給定三個整數陣列 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 輸入第一行包含乙個整數n。第二行包含n個整數a1,a2,an。第三行包含n個整數b1,b2,bn。第四行包含n個整數c...