当前位置: 首页 > wzjs >正文

聊城网站建设包括哪些网页设计与制作步骤

聊城网站建设包括哪些,网页设计与制作步骤,旅游网站的功能结构图,上海seo优化bwyseo一、前言 在面对二维区间统计问题时,比如: 查询某个一维区间中,大于某个值的数的个数对一个序列同时支持区间查询 单点修改 我们常用的一维数据结构(如线段树、树状数组)往往显得力不从心。此时,我们可…

一、前言

在面对二维区间统计问题时,比如:

  • 查询某个一维区间中,大于某个值的数的个数
  • 对一个序列同时支持区间查询 + 单点修改

我们常用的一维数据结构(如线段树、树状数组)往往显得力不从心。此时,我们可以考虑一种高效的数据结构组合:树套树


二、什么是树套树?

“树套树”顾名思义,就是一棵树中的每个节点再套一棵树

最常见的树套树结构是:

  • 外层:线段树/树状数组,按照下标维护区间
  • 内层:平衡树(如 STL multiset 或手写 Treap/Splay)维护该区间内的值集合

通过树套树,可以实现如下操作:

  • 单点修改某个值
  • 查询区间中小于/大于某值的数的个数
  • 查询区间第 k k k 小数值(需平衡树)

三、典型问题:二维数点问题

问题描述

给定一个长度为 n n n 的数组 a a a,支持以下操作:

  1. 修改某个位置的值
  2. 查询某个区间 [ l , r ] [l, r] [l,r] 内,**有多少个数大于 k k k

例如:

a = [1, 5, 2, 4, 3]查询 (l=2, r=4, k=2):返回 2(即 5 和 4)

四、树套树实现思路

1. 外层线段树(按下标划分)

我们构建一棵线段树,每个节点维护一个子区间 [ l , r ] [l, r] [l,r] 对应的数值集合(支持动态插入和删除)。

2. 内层平衡树(或 multiset)

每个线段树节点用一个 multiset 保存该区间内所有数值,并支持:

  • 插入 / 删除某个值(用于修改操作)
  • 查询大于某个值的个数(用 upper_bound 实现)

五、代码实现(C++)

#include <bits/stdc++.h>
using namespace std;const int N = 1e5 + 10;
int a[N];struct SegmentTree {int l, r;multiset<int> s;SegmentTree* left = nullptr;SegmentTree* right = nullptr;SegmentTree(int l, int r): l(l), r(r) {if (l == r) {s.insert(a[l]);} else {int m = (l + r) / 2;left = new SegmentTree(l, m);right = new SegmentTree(m + 1, r);s.insert(left->s.begin(), left->s.end());s.insert(right->s.begin(), right->s.end());}}void update(int pos, int old_val, int new_val) {s.erase(s.find(old_val));s.insert(new_val);if (l == r) return;int m = (l + r) / 2;if (pos <= m) left->update(pos, old_val, new_val);else right->update(pos, old_val, new_val);}int query(int ql, int qr, int k) {if (qr < l || r < ql) return 0;if (ql <= l && r <= qr) {return s.end() - s.upper_bound(k);}return left->query(ql, qr, k) + right->query(ql, qr, k);}
};

使用方式

int main() {int n, q;cin >> n >> q;for (int i = 1; i <= n; ++i) cin >> a[i];SegmentTree* root = new SegmentTree(1, n);while (q--) {string op;cin >> op;if (op == "Q") {int l, r, k;cin >> l >> r >> k;cout << root->query(l, r, k) << '\n';} else if (op == "M") {int x, v;cin >> x >> v;root->update(x, a[x], v);a[x] = v;}}
}

六、复杂度分析

  • 构建 O ( n l o g n ) O(n log n) O(nlogn),每个数插入 l o g n log n logn
  • 单点修改 O ( l o g 2 n ) O(log^2 n) O(log2n),每层修改 multiset 需要 l o g n log n logn
  • 区间查询 O ( l o g 2 n ) O(log^2 n) O(log2n),遍历 l o g n log n logn 层,每层查 multiset

树套树能高效解决如下问题:

  • 区间中大于 / 小于某值的个数
  • 区间第 k k k 大(需在内层维护秩信息)
  • 二维数点问题(如 CDQ 分治 + 树套树)
  • 动态逆序对维护
http://www.dtcms.com/wzjs/194166.html

相关文章:

  • 关于建设网站的申请报告长沙seo公司
  • wordpress cx-udy河南做网站优化
  • 怎样提升网站权重衡水网站优化推广
  • 一个阿里云怎么做两个网站培训心得体会万能模板
  • 浙江省公路建设发票网站上海推广seo
  • 北京网站建设公司华网天下优惠免费的网站软件下载
  • 用c语言可以做网站吗b站推广入口2023破解版
  • 福州做公司网站广州seo优化排名公司
  • 做美食的网站可以放些小图片搜索引擎收录
  • 网站限制上传图片大小商品推广软文范例300字
  • 帮忙做网站的协议发外链的论坛
  • 笔记本怎么建设网站百度数据研究中心官网
  • 网络营销课程设计报告郑州网站seo外包
  • 网站建设文案详情seo公司上海
  • 做网站一屏一屏的网站优化工具
  • 南京那些公司做网站营销型网站建设多少钱
  • 个人网站设计模板下载网站域名在哪买
  • 微信网站界面设计接广告的平台推荐
  • 深圳顶级做网站公司网络营销有哪些手段
  • 浙江网站建设哪家最好搜索引擎收录查询
  • 万宁网站建设营销推广app
  • 昆明定制网站建设seo技巧是什么意思
  • 贵阳官网建设价格广东百度seo关键词排名
  • 做网站与全网营销搜索推广排名优化市场推广的方法和规划
  • 做网站简约学校网站网站制作哪家公司好
  • 建设实木餐桌椅移动网站什么是网络营销推广
  • 遵义网站制作小程序分析网站
  • 专业的做网站nba最新消息球员交易
  • 用织梦做的网站网络营销推广方案有哪些
  • 做网站需要多少带宽网址域名注册信息查询