zoukankan      html  css  js  c++  java
  • UVA 110020 Efficient Solutions (STL)

    把一个人看出一个二维的点,优势的点就是就原点为左下角,这个点为右上角的矩形,包含除了右上角以外边界,其他任意地方不存在点。

    那么所有有优势的点将会形成一条下凹的曲线。

    因为可能有重点,用multiset,按照x优先,相同时再比较y的顺序排序,动态维护满足条件的总人数。

    当新加的P点的y坐标大于左边的点的时候没有优势,忽略,用lower_bound判断一下。

    当新加的P点有优势,但是可能使得其他的的点失去优势,依次把后面的点不满足条件的点删除。

    红黑树好复杂。

    #include<bits/stdc++.h>
    using namespace std;
    
    struct Point
    {
        int x,y;
        bool operator < (const Point & r) const {
            return x < r.x || ( x == r.x && y < r.y );
        }
    };
    
    multiset<Point> S;
    
    int main()
    {
        int T, kas = 0; scanf("%d",&T);
        while(T--){
            if(kas) puts("");
            int n;
            scanf("%d",&n);
            printf("Case #%d:
    ",++kas);
            S.clear();
            while(n--){
                Point P;
                scanf("%d%d",&P.x,&P.y);
                auto it = S.lower_bound(P);
                if(it == S.begin() || (--it)->y > P.y){
                    it = S.insert(P);
                    while(it != S.end() && *it == P) it++;
                    while(it != S.end() && it->y >= P.y) S.erase(it++);
                }
                printf("%d
    ",S.size());
            }
        }
        return 0;
    }
  • 相关阅读:
    程序为什么加载到内存中
    cortex-A cortex-R cortex-M处理器的性能比较
    makefile 中的赋值方式
    python(老男孩全栈观后感------文件处理)
    python------lambda(匿名函数)
    python------filter(过滤器)
    Express深入解读
    nodejs安装
    一道有意思的题目
    charAt获取数组,测试
  • 原文地址:https://www.cnblogs.com/jerryRey/p/4803715.html
Copyright © 2011-2022 走看看