题解 | #牛可乐与NCPC#

牛可乐与NCPC

https://ac.nowcoder.com/acm/problem/235569

这题好难。。。,题目上要求不存在一个队伍j使得链接:ajai,bj<bi 或者 aj<ai,bj≤bia_j< a_i,b_j\leq b_iaj<ai,bjbi 那么就可以加入观察里面。单纯从数据上看两个变量都需要满足,有点麻烦。
但如果放到坐标系上可以看出其实是要求i所形成的矩形里面不能有别的点(包括边框)(这是难想的第一步,将问题进行转换)。那么现在要解决的问题就是如何快速的知道某个矩形里面有没有不符合要求的点。按照题目来说就是每增加一个判断里面是否有点,如果没有就加入观察队列里面,还需要将受这个点影响而导致变成不符合的点排除。
那么如何用代码实现呢,首先加入一个点之后,就得寻找x比他小或者x与之相等但y要比他小的点。因为这些点有可能会导致这个点不是候选点。找到之后如果没有这样的点或者前一个点的y比他要大的话,证明是一个候选点(这里解释下为什么上一个y比他大也可以,因为随着x的增大y应该是减小的,所以只需要判断最后一个x的y比他大,那么前面所有的点的y就都比他大了)。然后就是通过寻找最后一个满足的点,然后判断y是否大于它,如果大于的话就证明得消去了。
小语法:在结构体里面重载运算符<可以改变upper_bound和lower_bound的比较规则。
#include <bits/stdc++.h>


using namespace std;
struct ty{
    int x, y;
    bool operator < (const ty &a) const {
        return x<a.x || (x==a.x&&y<a.y);
    }
};
multiset<ty> ms;

int main() {
    int T, n;
    cin>>T;
    for (int i=1;i<=T;i++) {
        cin>>n;
        ms.clear();
        int x, y;
        cout<<"Case #"<<i<<":\n";
        for (int i=0;i<n;i++) {
            scanf("%d%d", &x, &y);
            ty p;
            p.x = x;
            p.y = y;
            multiset<ty>::iterator it = ms.lower_bound(p);
            if (it==ms.begin()||(--it)->y>y) {
                ms.insert(p);
                it = ms.upper_bound(p);
                while (it!=ms.end()&&it->y>=y) ms.erase(it++);
            }
            cout<<ms.size()<<endl;
        }
        cout<<endl;
    }
    return 0;
}


全部评论

相关推荐

10-19 10:28
已编辑
西南石油大学 后端工程师
团孝子已上线feeling:面了很多家公司,能感受到目前只有小公司+外包喜欢问八股。大厂虽然也问八股,但是是从实习、项目中进行提问,并且大厂会问很深,面试官也会对你的回答进行思考➕追问,所以准备大厂面试前一定要备好相关资料。对于算法,我做的是codetop前100+力扣hot100+力扣高频150,面试中实感hot100就足够,基本上只要是hot100就秒答。对于项目和八股,我做的也是烂大街的星球项目,八股则是看小林和问ai,自己也写了很多技术博客和画了很多思维导图,并且自己也尝试用嘴巴说出来,不只停留于纸面。运气也很重要,必须要让面试官/HR看到简历才行,所以建议投递时间是下午两点。tl:第一岗位9.9&nbsp;投递9.10&nbsp;一面(一面评价:最近见过最强的大三,结束五分钟后约二面,都晚上九点了不下班吗)9.11&nbsp;二面(三道算法a出两道,反问评价:经验不够等横向,我实习生要啥经验)9.21挂(实习时间过短+其他原因,想要一年实习的,为什么不招个正职)第二岗位10.10投递10.11约面(主管打电话,说看到我之前投递记录了想要我挂qa职进去干后端,同意)10.14&nbsp;一面(无八股,主动说确实很强,意愿很强)10.16&nbsp;oc其余,友邦,东软,东华,惠择,用友oc已拒京东测开一面挂(投后端被测开捞)腾讯测试已拒(投后端被测开捞)ps:表扬惠择的主管面,没怎么问技术(可能是一面面试官沟通过了),全程一起讲大道理,解答了心中很多疑惑,也告诉我以面试官角度来看怎么选候选人,如果可以下次一定选惠择
HeaoDng:美团好像可以触发一面通
点赞 评论 收藏
分享
评论
3
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务