代码拉取完成,页面将自动刷新
<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>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。