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\n");else{int rt=It_merge(x,y);int temp=rt;int ans=It_pop(rt);ans/=2;printf("%d\n",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;}}}}