• 区域赛第33天


    1、最近感觉自己的时间可以利用好的,但是就是自己的学习效率比较低,主要问题就是一旦放松下来就会放松很长的时间,所以说浪费了很多的时间。。。

    2、现在最重要的就是从心底相信自己真的能拿金牌,所以就是现在主要的任务就是恢复信心,所以我不能看题解,晚上的时候可以找个地方好好的看看题解。

    3、然后就是最近自己的身体好像不是那么的好,所以不能熬夜。。。

    4、组队赛感觉好像不能很好对的进行,因为队友都回家了,所以还是好好的提高的自己的实力还是好的。

    5、明天的时候就是不能放松,累的时候就谢谢总结或者看看mooc。

    6、明天的任务就是把那次的题全部的补完,然后就是紫书dp写3-7个题,然后就是把总结写完,就是这个样子。

    7、明天时候看看自己能真正的学习多长的时间。

    8、睡觉,GOGOGOGO

    9、左偏树,就是一个可以支持合并的堆,感觉还是很好用的,下面给出模板,题目 HDU 1512

    #include<bits/stdc++.h>
    using namespace std;
    int pre[100002];
    int rear;
    struct node
    {
        int dis,key,l,r;
    }D[101111];
    void inist(int n)
    {
        rear=0;
        D[0].dis=-1;
        for(int i=1;i<=n;i++)
        {
            pre[i]=i;
        }
    }
    int It_new(int key)
    {
        rear++;
        D[rear].l=D[rear].r=0;
        D[rear].key=key;
        D[rear].dis=0;
        return rear;
    }
    int It_merge(int r1,int r2)
    {
        if(!r1) return r2;
        if(!r2) return r1;
        if(D[r1].key<D[r2].key)
        {
            swap(r1,r2);
        }
        D[r1].r=It_merge(D[r1].r,r2);
        if(D[D[r1].l].dis<D[D[r1].r].dis)
        {
            swap(D[r1].l,D[r1].r);
        }
        D[r1].dis=D[D[r1].r].dis+1;
        return r1;
    }
    int It_pop(int &rt)
    {
        int ret=D[rt].key;
        rt=It_merge(D[rt].l,D[rt].r);
        return ret;
    }
    void It_push(int &rt,int key)
    {
        rt=It_merge(rt,It_new(key));
    }
    int find(int x)
    {
        return x==pre[x]?x:pre[x]=find(pre[x]);
    }
    int main()
    {
       int n;
       while(~scanf("%d",&n))
       {
           inist(n);
           for(int i=1;i<=n;i++)
           {
               int x;
               scanf("%d",&x);
               It_new(x);
           }
           int m;
           scanf("%d",&m);
           while(m--)
           {
               int x,y;
               scanf("%d%d",&x,&y);
               x=find(x); y=find(y);
               if(x==y) printf("-1
    ");
               else
               {
                   int rt=It_merge(x,y);
                   int temp=rt;
                   int ans=It_pop(rt);
                   ans/=2;
                   printf("%d
    ",ans);
                   D[temp].l=D[temp].r=0;
                   D[temp].key=ans;
                   D[temp].dis=0;
                   rt=It_merge(rt,temp);
                   pre[x]=rt; pre[y]=rt;
                   pre[rt]=rt;
               }
           }
       }
    
    }
    

      

  • 相关阅读:
    ArrayList 和 LinkList 的区别
    fork()相关的源码解析
    http协议状态码及其意义
    数据库的死锁相关知识
    JDBC事务的相关知识
    请求http页面的相关过程
    static 关键字的作用
    计算机网络网络层的IP地址划分及子码
    文件的相关操作.
    set集合和深浅拷贝
  • 原文地址:https://www.cnblogs.com/Heilce/p/7616490.html
Copyright © 2020-2023  润新知