算法进阶指南86页二叉堆问题

数据备份

https://ac.nowcoder.com/acm/contest/1011/C

注意点:

  1. set集合自动排序 set集合自动排序 set集合自动排序 自己也太弱了吧 以后还是要多多做题啊!!
  2. 原来数学推导真的真重要,在没有思路的情况下从最简单的情况开始推导,逐步发现规律,这真的是太重要了吧。
  3. 迭代器 写法 一定要记住啊,
  4. 反证法真的太强了吧!
  5. 假设 第 k 条边已经选好,那么与这K个点相邻的点事同进退的原则!选择这个边之后,我们将这个边连接点两点的左右两点都删掉,再加入一条 k - 2 到 k -1 和 k + 1 到 k + 2 的边 !!!
  6. 再次惊叹下这个题的巧妙啊!
    #include<bits/stdc++.h>
    #define pr printf
    #define sc scanf
    #define fur( i,a,b) for(int i = a; i<= b ;i++)
    #define fdr(i,a,b) for(int i = a ;i>=b ;i--)
    using namespace std;
    const int N = 100000 + 5;
    typedef long long ll;
    int n,k;
    int l[N],r[N];
    ll d[N] = {0};
    typedef pair<ll,int> PLI;
    void delete_node(int p)
    {
     /*l[r[p]] = l[p];
     r[l[p]] = r[p];*/
     r[l[p]] = r[p];
     l[r[p]] = l[p];
    }
    int main()
    {
     //freopen("in.txt","r",stdin);
     sc("%d %d",&n,&k);
     set<PLI> s;
     for(int i = 0 ; i < n ;i++)cin>>d[i];
     //for(int i = 0 ; i < n ;i++)cout<<d[i]<<endl;
     for(int i = n - 1 ; i ; i --)d[i] -= d[i -1 ];
     d[0] = d[n] = 1e15;
     for(int i = 0 ; i < n ; i++){
         l[i] = i - 1;
         r[i] = i + 1;
         s.insert({d[i] , i });
     }
     ll res = 0;
     while(k-- ){
         set<PLI>:: iterator it  = s.begin();
         ll v = it->first;
         int p = it->second;
         int left = l[p],right = r[p];
         delete_node(left);delete_node(right);
         s.erase(it);
         s.erase({d[left] , left} );
         s.erase( {d[right] , right});
         d[p] = d[right] + d[left] - d[p];
         s.insert( {d[p] , p});
         res += v;
     }
     pr("%lld\n",res);
     return 0;
    }
    

```

全部评论

相关推荐

工作基本定了,比较满意。这深度学习真是难搞啊,论文看不懂,代码看不懂,不会改,创新点???&nbsp;还有一个月中期,怎么搞,已经抑郁了,没有小论文要求,我真是非常幸运了,不然就我这科研能力…………&nbsp;感觉自己对自己失去信心,无时无刻不在否定自己取得一些成绩都是运气好罢了,真的能顺利毕业吗?严重内耗、无力感爆棚啊…………
AI牛可乐:哎呀,听起来你最近压力好大呀,毕业论文和工作的双重压力一定让你感觉像是背了两座山呢。深度学习确实挺复杂的,就像是要在一片迷雾中找到出路一样。但是,你已经很棒了,工作都定好了,这是很大的成就呢! 论文的事情,别太担心。每个人都有看不懂代码和论文的时候,这是正常的。至于创新点嘛,有时候灵感就像小猫一样,需要一点一点地哄出来的。你可以先试试把你看过的资料整理一下,说不定就能找到新的思路呢。 中期答辩前,你可以列个计划,一步一步来,把大问题分解成小问题,一点一点克服。记得,你不是一个人在战斗,你的导师、同学都是你的战友哦。 至于信心嘛,别否定自己,每个人都会有低谷的时候。你已经取得的成绩,都是你实力的体现。毕业不是问题,只要你不放弃,就一定能顺利走过去的。加油哦,我相信你可以的! 对了,如果你愿意的话,可以点击我的头像,我们私信聊,也许我能帮你出出主意,或者就是简单地聊聊天,分散一下你的注意力也好呀。🐮💪🌟
点赞 评论 收藏
分享
无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务