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;
    } 
  • 相关阅读:
    奥多朗WIFI 插座
    USB2.0的最高传输速率
    Win10各个版本免费激活密钥
    LINUX API函数大全
    COLLECTL LINUX 监控
    打印机工作原理
    深入理解windows系统内的GMT和时区
    searchIndexer.exe占用过高CPU
    systemtap 作用-- SystemTap使用技巧
    ADSL和ITV
  • 原文地址:https://www.cnblogs.com/lusiqi/p/12316299.html
Copyright © 2011-2022 走看看