柑橘味砖头


私信TA

用户名:uq_73696371690

访问量:493

签 名:

等  级
排  名 9009
经  验 1128
参赛次数 0
文章发表 17
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:将 ai<bj<ck 拆成两个式子 bj>ai 和 bj<ck; 所以只需要枚举j即可再用二分找出边界

注意事项:

参考代码:

#include<bits/stdc++.h>

#define int long long

using namespace std;

const int N =1e5+10;

int n,a[N],b[N],c[N],ans;

signed main()

{   

    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);

    cin>>n;

    for(int i=1;i<=n;i++) cin>>a[i];

    for(int i=1;i<=n;i++) cin>>b[i];

    for(int i=1;i<=n;i++) cin>>c[i];

    sort(a+1,a+1+n,less<int>());

    sort(b+1,b+1+n,less<int>());

    sort(c+1,c+1+n,less<int>());

    for(int j=1;j<=n;j++){

        //找出 ai<bj bj<ck 枚举b即可

        //找出小于 b[j]的最大下标

        int indexa=lower_bound(a+1,a+n+1,b[j])-a-1;//减1去除等于

        //找出大于b[j]的最小下标

        int indexc=upper_bound(c+1,c+n+1,b[j])-c;

        indexc = n-indexc+1;

        ans+=(indexa*indexc);

    }

    cout<<ans<<endl;

    return 0;

}


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区