首页 > 其他分享 >ABC_214E Packing Under Range Regulations(贪心模拟)

ABC_214E Packing Under Range Regulations(贪心模拟)

时间:2022-11-23 16:56:33浏览次数:62  
标签:214E ABC pos Regulations Packing vc 端点 Under

ABC 214E Packing Under Range Regulations(贪心模拟)

Packing Under Range Regulations

给出\(n\,(1 \le n \le 2e5)\)个区间限制\([l, \; r]\),表示在编号为\([l ,\; r]\)的盒子中必须有一个球,请问是否能够合理地放置球满足条件:每个盒子中至多只有一个球。

思路:

​ 我们很容易可以想到用左端点小到大排序,然后右端点小到大,但是发现这样做的是不对的,可以用一组数据轻松将其hack。我们的思路应该是这样的,枚举左端点 l,每次优先处理 r 最小的球,一直向后放置,直到下一个 l 的时候停止。这样就可以解决譬如[2, 3], [2, 4], [3, 3]的问题。

代码

​ 先对左端点排序,然后把同一个左端点的右端点都丢进去小根堆,然后尽可能多的放置右端点更小的球,若没有放置完的,保留在小根堆里等待下一个左端点。因为是在下一个左端点处理上一个左端点,所以我们要在最后加入一个inf来处理最后一个左端点。

void solve()
{
    int n;
    cin >> n;
    vector<PII> vc(n);
    for(int i = 0; i < n; i ++)
        cin >> vc[i].first >> vc[i].second;
    sort(all(vc));
    vc.push_back({inf, inf});

    priority_queue<int, vector<int>, greater<int> > q;
    int ok = 1;
    int pos = -1;
    for(auto [l, r] : vc)
    {
        if(pos == l)
            q.push(r);
        else
        {
            while(pos < l && q.size())
            {
                auto t = q.top();
                q.pop();
                if(pos <= t)
                    pos ++;
                else
                    ok = 0;
            }
            pos = l;
            q.push(r);
        }
    }
    if(ok)
        cout << "Yes\n";
    else
        cout << "No\n";
}   

signed main()
{
    int _ = 1;
    cin >> _;
    while(_--)
        solve();
}

标签:214E,ABC,pos,Regulations,Packing,vc,端点,Under
From: https://www.cnblogs.com/DM11/p/16918916.html

相关文章

  • ABC 214D Sum of Maximum Weights(并查集模拟删边)
    ABC214DSumofMaximumWeights(并查集模拟删边)SumofMaximumWeights​ 给出有\(n\;(2\len\le1e5)\)个点的一棵树,定义\(f(x,y)\)表示从节点x到节点y的最短......
  • MFC标签控件 CTabCtrl
    CTabCtrl标签页使用引用TabSheet.h.cpp添加到项目中拖入控件tabctrl添加变量 类型TabSheet类型创建两个标签页 属性border改为none style改为c......
  • Atcoder ABC 277 A - E
    **A^{-1}**题意:给定一个序列,和一个指定值,输出这个值在序列中的位置(序列的下标从1开始)思路:签到题时间复杂度:O(n)代码:#include<bits/stdc++.h>usingnamespacestd;......
  • ABC262F
    ABC262F*2334卡手的构造题,不是很难想,主要是细节比较多。题意给定一个排列\(p\)。你可以最多执行\(k\)次操作。删除一个数。将\(p\)中末尾的数移到开头。找出......
  • ABC278 整合题解
    AA题,送分题。link。思路数据范围很小,其实直接模拟也是可以通过的。不过我们很容易想到\(O(n)\)的算法。对于前\(k\)个数,不输出,其他数正常输出。然后再在末尾......
  • ABC278F 题解
    前言题目传送门!或许更好的阅读体验?博弈论,状压,记忆化搜索。思路看到很小的\(n\),容易联想到状压、搜索。本题就是状压加搜索。设状态\(x\)的每一位表示:如果第\(i\)......
  • ABC278D 题解
    前言题目传送门!更好的阅读体验?难度加强版:P1253。思路很容易想到线段树。维护\(cov_i\)表示覆盖的懒标记。单点加与单点查都非常简单。全局覆盖只需要给每一层都打......
  • ABC245G题解
    似乎是经典套路?先不考虑颜色限制,那么就直接把\(l\)个关键点当作起点跑多源最短路就行了。现在考虑颜色限制,有一种暴力的想法是枚举所有颜色,只把这种颜色的点当作起点,然......
  • ABC138F
    稍微手玩一下可以发现:若\(y\ge2x\),那么\(y-x\gty\%x\)若\(y\lt2x\),那么\(y-x=y\%x\)\(y\oplusx\gey-x\)于是不难发现只有\(y\lt2x\)时才可能有贡献。即......
  • 「NOIP赛前冲刺」ABC278F
    Solution简单状态压缩,考虑设\(f_{S,i}\)表示状态为\(S\)并且当前要求一个开头为\(s_i\)的结尾字符的单词,\(\text{First}\)如果能赢为\(0\),否则为\(1\)。那么很......