题目链接:1.递增三元组 - 蓝桥云课 (lanqiao.cn)
解题思路:遍历中间的数组,找第一个数组的数有几个小于中间数组数的数量,找第三个数组有几个数小于等于中间数组数的数量,再用总数量减去这个数,就是大于中间数组数的量,将两个数相乘就是关于中间数组某个数的三元组
下面是c++代码:
#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
// 请在此输入您的代码
long long n, count = 0, arr[100000], brr[100000], crr[100000], ans = 0, s1 = 0, s2 = 0;
std::cin >> n;
for (int i = 0; i < n; i++) {
std::cin >> arr[i];
}
for (int i = 0; i < n; i++) {
std::cin >> brr[i];
}
for (int i = 0; i < n; i++) {
std::cin >> crr[i];
}
sort(arr, arr + n);
sort(brr, brr + n);
sort(crr, crr + n);
for (int i = 0; i < n; i++) {
while (s1 < n && arr[s1] < brr[i]) {//在1第一个数组中找比中间数组小的数
s1++;
}
while (s2 < n && crr[s2] <= brr[i]) {//在第三个数组中找比中间数组小的数,再用总量减去就是比中间数组数大的数量
s2++;
}
ans += (long long)s1 * (n - s2);
}
std::cout << ans;
return 0;
}