巧用set比较大小,缩短时间复杂度

struct Node
{
    long long a;
    long long b;
    long long c;
    long long num;
    int i;
    bool operator < (const Node& t)const
    {
        return ((num>t.num)|| (num==t.num&&a<t.a)|| (num==t.num&&a==t.a&&b<t.b)||(num==t.num&&a==t.a&&b==t.b&&c<t.c)||(num==t.num&&a==t.a&&b==t.b&&c==t.c&&i<t.i));
    }

} node[1005];
set<Node>s;
View Code

用set存放结构体,通过重载小于号,实现快速排序。

通过

Node tmp;
        set<Node>::iterator iter;
        for(int i=sum; i>m; i--)
        {
            tmp=(*s.begin());
            s.erase(tmp);
            res-=tmp.num;
            tmp.c-=1;
            tmp.num=(2*tmp.c-1)*tmp.b;
            s.insert(tmp);
        }
View Code

这样实现对set内元素的修改。因为插入set内的元素是不可变的,所以先提取出想改变的元素(通过iter甚至可以提取第n大的数),然后通过

擦出插入操作来实现对set内元素的修改。

posted @ 2016-05-15 21:03  超级学渣渣  阅读(1005)  评论(0编辑  收藏  举报