由于堆的高度为 \(\log{n}\)
所以以上两个操作复杂度显然为 \(\mathcal {O}(\log{n})\)
那么有了这两个操作我们就可以完成:
插入(新建节点然后向上调整)
查询最大(最小)值(根节点权值)
删除最大(最小)值(与末尾节点交换,再向下调整)
删除任意节点(与末尾交换,再向上或向下调整,见代码)
修改任意节点权值(向上或向下调整) Luogu (模板)堆
[code]#includeusing namespace std;static constexpr int AwA = 1e6 + 10;inline static int Read() { int res = 0; bool flag = false; int c = getchar(); while ((c < '0' || c > '9') && ~c) { flag |= c == '-'; c = getchar(); } while (c >= '0' && c > 1) { int fa = u >> 1; if (val[fa]