abc312c <二分答案>

题目

C - Invisible Hand

思路

  • 二分X,同时二分得到buyer和seller的人数(很精巧的二分~);
  • 当然,从复杂度角度,O(NlogN) 也是可以的;
  • 实际上可以写成O(N)的形式?感觉线性扫描也可?

代码

点击查看代码
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
using LL = long long;
using PII = pair<int, int>;
const int N = 2e5 + 10;
int a[N], b[N];

void solv()
{
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i ++) cin >> a[i]; // sell
    for (int i = 1; i <= m; i ++) cin >> b[i]; // buy
    sort(a + 1, a + 1 + n);
    sort(b + 1, b + 1 + m);
    int l = 0, r = 1e9 + 10;
    while (l < r)
    {
        int mid = (l + r ) / 2;

        int isell = upper_bound(a + 1, a + 1 + n, mid) - a;
        int nsell = isell - 1;  // 最低售价 >= mid 的 sellers 的人数
        int ibuy = lower_bound(b + 1, b + 1 + m, mid) - b;
        int nbuy = m - ibuy + 1;  // 最高出价 <= mid 的 buyers 的人数
        
        if (nsell >= nbuy) r = mid;
        else l = mid + 1;
    }
    cout << l << endl;
}

int main()
{
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int T = 1;
	// cin >> T;
    while (T --)
    {
        solv();
    }
    return 0;
}

posted @   O2iginal  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示