#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 1e5+10;
int num[3][N];
int main() {
int n;
scanf("%d", &n);
for(int i = 0; i < 3; ++i)
for(int j = 1; j <= n; ++j)
scanf("%d", &num[i][j]);
for(int i = 0; i < 3; ++i)
sort(num[i]+1, num[i]+n+1);//每一行都从小到大排序
LL ans = 0;
//枚举B,寻找A满足的个数以及C满足的个数相乘
int a = 1, c = 1;
for(int i = 1; i <= n; ++i) {
int key = num[1][i];
while(a<=n && num[0][a] < key) a++;
while(c<=n && num[2][c] <= key) c++;
ans += (LL)(a-1)*(n-c+1);
}
cout<<ans<<endl;
return 0;
}
AcWing 1236. 递增三元组 双指针
最新推荐文章于 2024-10-05 21:10:28 发布
本文介绍了一个C++程序,它处理一个二维整数数组,对每一行进行排序,然后通过枚举计算满足特定条件(两个元素之和)的元素对在不同集合中的数量。
摘要由CSDN通过智能技术生成