1 Star 2 Fork 0

rlmnsk/算法与数据结构

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
zkwtree.sublime-snippet 1.77 KB
一键复制 编辑 原始数据 按行查看 历史
rlmnsk 提交于 2023-02-05 06:12 . 更改起始下表为0
<snippet>
<content><![CDATA[
template<typename T>
class ZkwTree {
int N = 0;
T *node;
public:
~ZkwTree() {
if (!N) return;
delete[] node;
}
void setval(const ZkwTree& zkwtree) {
N = zkwtree.N;
node = new T[(N << 1) + 2]();
}
ZkwTree &operator=(const ZkwTree& zkwtree) {
setval(zkwtree);
return *this;
}
ZkwTree(const ZkwTree& zkwtree) {
setval(zkwtree);
};
ZkwTree(int n) {
for (N = 1; N < n; N <<= 1);
node = new T[(N << 1) + 2]();
};
ZkwTree(std::vector<int>& q) {
for (N = 1; N < q.size(); N <<= 1);
node = new T[(N << 1) + 2];
for (int i = 1; i <= q.size(); i++) {
node[i + N] = q[i - 1];
}
for (int i = N; i; i--) {
node[i] = std::max(node[i << 1], node[i << 1 | 1]);
}
};
// 下标从0开始
T query(int left, int right) {
// 从1开始删除
left++, right++;
T res = -2e9;
left += N - 1, right += N + 1;
for (; left ^ right ^ 1; left >>= 1, right >>= 1) {
if (~left & 1) { res = std::max(res, node[left ^ 1]); }
if (right & 1) { res = std::max(res, node[right ^ 1]); }
}
return res;
}
void update(int idx, T k) {
// 从1开始删除
idx++;
node[idx + N] = k;
for (idx = (idx + N) >> 1; idx > 0; idx >>= 1) {
node[idx] = std::max(node[idx << 1], node[idx << 1 | 1]);
}
}
};
]]></content>
<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
<!-- <tabTrigger>hello</tabTrigger> -->
<!-- Optional: Set a scope to limit where the snippet will trigger -->
<!-- <scope>source.python</scope> -->
</snippet>
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/rlmnsk/algorithm-and-data-structure.git
git@gitee.com:rlmnsk/algorithm-and-data-structure.git
rlmnsk
algorithm-and-data-structure
算法与数据结构
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385