[划分树] poj 2104

这篇博客介绍了划分树数据结构的定义和实现,通过一个具体的例子展示了如何使用划分树来解决POJ 2104问题。在划分树中,每个节点保存一个区间,并根据特定规则将元素分配到左右子树,同时维护一个num域记录信息。文章通过C++代码展示了如何构建划分树以及进行区间查询操作。
摘要由CSDN通过智能技术生成
/**
[划分树] poj 2104
划分树定义为,
她的每一个节点保存区间 [lft,rht ]所有元素,
元素排列顺序与原数组(输入)相同,但是,
两个子树的元素为该节点所有元素排序后(mid - lft + 1)个进入左子树,其余的到右子树,
同时维护一个num域,num[i] 表示[lft,i]这些点有多少进入了左子树。

真实的树由深度和区间存储
*/
#include <stdio.h>
#include <algorithm>
#define N 100001

int sum[20][N],tr[20][N],sor[N];
void build(int l,int r,int d)
{
    if(l == r)
        return ;
    int mid = (l + r) >> 1,i,lp = l,rp = mid + 1;
    for(i = l; i <=  r; ++i)
    {
        sum[d][i] = sum[d][i-1];

        if(tr[d][i] <= sor[mid] && lp <= mid)     //放到左子树
            tr[d+1][lp++] = tr[d][i],++sum[d][i];
        else                
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值