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;
    }
  • 相关阅读:
    python 列表 字典的操作补充
    RPC远程过程调用
    python-迭代器 生成器 可迭代对象
    Semaphore源码分析
    CyclicBarrier源码分析
    CountDownLatch源码分析
    ReentrantLock源码分析
    AQS源码分析
    Mac下使用Clion调试MySQL源码配置流程
    hooks版本的pureComponent
  • 原文地址:https://www.cnblogs.com/jerryRey/p/4803715.html
Copyright © 2011-2022 走看看