2020/10/25周总结

1.平衡树 Treap

功能:
1.插入一个值
2.删除一个值
3.找前驱/后继
4.找最大/最小
5.求某个值的排名
6.求排名是k的数的值

其中前4个操作 使用multiset 与set 也可以完成 后面两个则需要treap

int pre(int &p,int key){ //必须在key为出现前进行查找 否在会找到key自身 也就是说可以找到 相等的
    if(!p) return -INF;
    if(tr[p].key > key) return pre(tr[p].l,key);
    return max(tr[p].key,pre(tr[p].r,key));
}

int pre2(int &p,int key){ //找到严格小于key的前驱
    if(!p) return -INF;
    if(tr[p].key > key) return pre(tr[p].l,key);
    return max(tr[p].key,pre(tr[p].r,key));
}

Treap的基本操作 这个可能splay也能用
Zig右旋 与 zag左旋 这个要熟练默写

void zig(int &p){
    int q = tr[p].l;
    tr[p].l = tr[q].r,tr[q].r = p,p = q;
}
void zag(int &p){
    int q = tr[p].r;
    tr[p].r = tr[q].l,tr[q].l = p,p = q;
}

暂时用来完成 一段序列中两个最接近的数 和查找排名的操作

2.刷题中发现的知识点

ceil函数:上取整函数
floor函数:下取整函数

注意点:在cin与scanf后 用getline时 需要在中间用个getchar()吸收掉空格或回车 否则会读入到getline里

二分相关
1.两种写法:
如果要二分搜索的区间为[1,n]
r = mid ,l = mid + 1,mid = (l + r) >>1;
Mid不会取到r这个值 为了处理无解情况 把区间写出[1,n+1] 如果l = n+1说明无解
l = mid,r = mid - 1,mid = (l+r+1)>>1;
Mid不会取到l这个值 写成[0,n]
2.求精度的二分中

    for(int i = 1;i<=100;i++){
        double mid = (l + r)/2;
        if(check(mid)) r = mid;
        else l = mid;
    }

通过多次循环可以 得到比较高的精度
另外 在未排序的序列中使二分有效的情况是mid能到的点满足 二分的条件

圆排列,即全排列除以排列的人数

在dp背包问题中,所求答案能被某个数整除 可以给dp增加一维对应余数的状态
例如:dp[i][j][(t + v[i] )%k] = max(dp[i-1][j-w[i]][t] + v[i],dp[i-1][j][(t+v[i])%k]);
令原状态用t 转移后状态为[(t+v[i])%k]这样写更容易表示,可以发现如果根据后状态去表示前状态时不容易表示时,可以根据前状态去表示后状态

最短路问题中 让某条边免费可以求多元最短路 此时直接在dijkstra中修改时错误的
要利用d[i][j] = min(d[i][j],d[i][a] + d[b][j],d[i][b]+d[a][j]) 求出

最小生成树问题
1.在最小生成树加边使之变成完全图
最小生成树已经确定 所以跑一遍最小生成树的同时顺便加上边就可以(或统计加的边的值)
加边操作时并不会改变最小生成树
2.求次小生成树
(1)可以先通过kruskal求出最小生成树 O(mlogm),统计标记每条边是树边还是非树边。
(2)预处理任意两点间的边权最大值dist[a][b]。O(n^2)
(3)依次枚举所有非树边,求min{sum + w - dist[a][b]},满足w>dist[a][b]。O(m)

刷题截图:

在这里插入图片描述洛谷共3道

最小生成树的一些题
刷水题巩固基础水题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值