zoukankan      html  css  js  c++  java
  • 2020牛客暑期多校训练营(第九场) F.Groundhog Looking Dowdy 尺取,双指针

    给定n条链,每条链中有若干个数字

    选出其中的m条,从每条中选出一个数,问能够得到的最小的最大差值。

    如果能选,每次都贪心的选择差最小的一对。那么不妨对原先的数都排一遍序放到容器里。然后相当于必须找到m个不同的才能选取。

    由于每次枚举L都是最多一个m发生变化。所以复杂度是没问题的。

    vector<pii> v;
    int vis[maxn];
    
    int main() {
        int n = readint();
        int m = readint();
        for (int i = 0; i < n; i++) {
            int k = readint();
            for (int j = 0; j < k; j++) {
                int x = readint();
                v.push_back(make_pair(x, i));
            }
        }
        sort(v.begin(), v.end());
        int res = INF;
        int cnt = 0;
        int l = 0, r = 0;
        //for (int i = 0; i < v.size(); i++) cout << v[i].first << " " << v[i].second << "
    ";
        while (l < v.size() - m && r < v.size()) {
            if (vis[v[r].se]) {
                r++;
                continue;
            }
            if (!vis[v[r].se] && cnt < m) cnt++, vis[v[r].se] = 1, r++;
            if (cnt == m) {
                //cout << l << " " << r << "
    ";
                res = min(res, v[r - 1].fi - v[l].fi);
                if (v[l + 1].se != v[l].se) cnt--, vis[v[l].se] = 0;
                l++;
            }
        }
        printf("%d", res);
    }
  • 相关阅读:
    python之virtualenv
    Markdown学习
    Python之进程(multiprocessing)
    python之concurrent.futures模块
    Python之线程
    LoadRunner(四)、检查点
    LoadRunner(三)、关联
    LoadRunner(二)、录制
    LoadRunner(一)、安装
    Jmeter(十九)逻辑控制器之if控制器
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13459125.html
Copyright © 2011-2022 走看看