zoukankan      html  css  js  c++  java
  • 2020牛客寒假算法基础集训营6

    D  重排列

    思路:

    upper_bound(a+1,a+1+n,b[i])-a-1记录的是在a[i]中第一个大于b[i]的地址,

    lower_bound(a+1,a+1+n,b[i])-a-1记录的是在a[i]中第一个不小于b[i]的地址

    内部的思想是二分

    a   1    1     2     3

    b   1    2     3     4

    c   2    3     4     4

    遍历b数组,当遍历到b[i]时,只用考虑a[i]有多少数可以使用,又因为1~i-1用了i-1个数,所以对于当前b[i]对应的a[i]数为c[i]-i+1。

    这是需注意c[i]-i+1可能为负数,但答案不为负,所以有一个max的比较。

    代码:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    const int mod = 1e9+7;
    const int maxn =1e5+10;
    ll a[maxn],b[maxn],c[maxn];
    ll ans;
    int main(){
        ll n;
        cin>>n;
        for(int i=1;i<=n;i++)
            scanf("%lld",&a[i]);
        for(int i=1;i<=n;i++)
            scanf("%lld",&b[i]);
        sort(a+1,a+n+1);
        sort(b+1,b+n+1);
        for(int i=1;i<=n;i++)
            c[i] = upper_bound(a+1,a+1+n,b[i])-a-1;
        ans = c[1];
        for(int i=2;i<=n;i++){
            ans = ans*max(c[i]-i+1,0ll)%mod;
        }
        cout<<ans<<endl;
        return 0;
    } 
  • 相关阅读:
    Kubernetes之network: failed to set bridge addr: "cni0" already has an IP address different from xxx问题
    k8s的存储Volume
    系统漏洞扫描与分析软件
    linux图形化安装oracle
    JMX监控tomcat jdbc pool
    Hyper-V
    苹果手机
    读书
    clickhouse count
    clickhouse分布式表
  • 原文地址:https://www.cnblogs.com/lusiqi/p/12316299.html
Copyright © 2011-2022 走看看