码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-05-15 21:40:49      阅读:628      评论:0      收藏:0      [点我收藏+]

标签:

技术分享
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内元素的修改。

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

标签:

原文地址:http://www.cnblogs.com/superxuezhazha/p/5496114.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!