2018初赛 F 递增三元组(@@@)

给定三个整数数组
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。
1 <= N <= 100000 0 <= Ai, Bi, Ci <= 100000 

输出

一个整数表示答案

样例输入 

3
1 1 1
2 2 2
3 3 3

样例输出 

27

#include <bits/stdc++.h>

using namespace std;
#define int long long
const int maxn = 1e5 + 10;
int n;
int a[maxn],b[maxn],c[maxn];
int ans;
signed main() {
   // freopen("in","r",stdin);
    ios::sync_with_stdio(0);
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> a[i];
    for (int i = 0; i < n; i++)
        cin >> b[i];
    for (int i = 0; i < n; i++)
        cin >> c[i];
    sort(a,a+n);
    sort(b,b+n);
    sort(c,c+n);
    for(int i = 0; i < n; i++){
        int x, y;
        x = lower_bound(a,a+n,b[i]) - a;
        y = n - (upper_bound(c,c+n,b[i]) - c);
        ans += x * y;
    }
    cout << ans << endl;
    return 0;
}
 
原文地址:https://www.cnblogs.com/xcfxcf/p/12716320.html