zoukankan      html  css  js  c++  java
  • Wannafly Camp 2020 Day 1F 乘法

    一开始想根据单调性双指针

    后来血了才想起来负负得正

    于是暴力二分答案即可

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N = 1000005;
    int n,m,k,a[N],b[N];
    int calc(int x) {
        int r=0;
        for(int i=1;i<=n;i++) {
            if(a[i]>0) r+=lower_bound(b+1,b+m+1,(double)x/a[i])-(b+1);
            if(a[i]<0) r+=m-(upper_bound(b+1,b+m+1,(double)x/a[i])-b)+1;
            if(a[i]==0) if(x<0) r+=m;
        }
        return r;
    }
    int check() {
        vector <int> v;
        for(int i=1;i<=n;i++) {
            for(int j=1;j<=m;j++) {
                v.push_back(a[i]*b[j]);
            }
        }
        sort(v.begin(),v.end());
        return v[k-1];
    }
    signed main() {
        scanf("%lld%lld%lld",&n,&m,&k);
        k=n*m-k+1;
        for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
        for(int i=1;i<=m;i++) scanf("%lld",&b[i]);
        sort(a+1,a+n+1);
        sort(b+1,b+m+1);
        int l=-(1ll<<60),r=1ll<<60;
        while(r>l) {
            int mid=(l+r)>>1;
            if(calc(mid)>=k) r=mid;
            else l=mid+1ll;
        }
        printf("%lld",l-1);
        //printf(" %lld",check());
    }
    
  • 相关阅读:
    jq 京东跳楼效果
    *Sum of NestedInteger
    **Minimum Window Substring & String类问题模板
    **Word Ladder
    *Longest Increasing Subsequence
    *Kth Largest Element in an Array
    *Permutations II
    *Implement Stack using Queues
    *Paint House II
    *Paint Fence
  • 原文地址:https://www.cnblogs.com/mollnn/p/12254273.html
Copyright © 2011-2022 走看看