动态主席树

RK3588开发笔记-MIPI-CSI接口视频解码芯片XS9922B调试 Rockchip RK3588 是一款高性能的处理器,支持多种摄像头接口,包括 MIPI(Mobile Industry Processor Interface)接口。MIPI是一种用于移动设备和嵌入式系统中的摄像头、显示器和其他传感器设备的串行接口标准。MIPI是MIPI联盟发起的为移动应用处理器制定的开放标准。CSI-2(Camera Serial Interface 2)是MIPI 联盟定义的另一种高速接口,主要用于摄像模组和处理器之间的连接。 阅读详情

ZOJ 2112
题目大意:给n个数,有m个操作。修改某个数,或者询问一段区间的第k小值。
动态主席树的意思就是原来的数组已经建好主席树了,然后又要修改数组中的某个值,然后还有许多查询,当然不止一次修改。
如果我们每次都建立主席树的话假如有n个数m次修改就是n*m的时间复杂度,这在n,m很大的时候就不行了,于是我们就新引进树状数组来存数组的变化值,当每次查询的时候只要将原来主席树里的值算出来,加上变化量就是当前的值了。
具体的树状数组怎么实现呢?
普通的修改一个值的树状数组相信很多人都会吧,不会的自行去百度在这里不做过多的解释。主席树就相当是一个前缀,所以可以相减解决区间问题,只不过这里的每个点代表的是一颗线段树。所以我们可以在这里可以用树状数组更新,存储变化值,每个点的修改都是一棵线段树,比如将第2个数进行修改,本来是2现在改成5,树状数组本来就会在相应的点+3,而现在是线段树,就可以现在代表2的位置-1再在代表5的位置+1这样就完成了修改,这是每个单点的修改,其他的就用树状数组进行对应的修改就好了,查询的时候也是用树状数组的查询方式加上原来主席树里的值就好了。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
const int maxn=10000*15*16;
/*
数组注解:
root:代表主席树的每个数字对应点的节点编号
a:原数组的数
hash:离散化是二分的数组
root2:树状数组里线段树的根节点编号
rootl:每次查找的多个树状数组左区间节点编号
rootr:每次查找的多个树状数组右区间节点编号
*/
int a[50010],Hash[60010],root[50010],sz,n,m;
int root2[50010],rootl[50],rootr[50];
int cntl,cntr;//每次更新时左右区间树状数组需要查找的最多节点数
struct Query//存储操作
{
    int opt,i,j,k;
} q[10010];
int get_hash(int x)//hash值
{
    return lower_bound(Hash+1,Hash+sz,x)-Hash;
}
struct chairman_of_tree
{
    struct zp
    {
        int l,r,sum;
        void clear()
        {
            l=r=sum=0;
        }
    } tree[maxn];
    int cont;
    void init()
    {
        sz=n+1;
        memset(root2,0,sizeof(root2));
        cont=1;
        tree[0].clear();
    }
    void update(int pre,int &k,int l,int r,int num,int val)//建立静态主席树
    {
        tree[cont]=tree[pre],tree[cont].sum+=val,k=cont++;
        if(l==r) return ;
        int mid=(l+r)>>1;
        if(l<r)
        {
            if(num<=mid)
                update(tree[pre].l,tree[k].l,l,mid,num,val);
            else
                update(tree[pre].r,tree[k].r,mid+1,r,num,val);
        }
    }
    int lowbit(int x)
    {
        return x&(-x);
    }
    void arr_update(int &rt,int l,int r,int pos,int val)//将第k个数改为val,更新树状数组
    {
        if(rt==0)
        {
            rt=cont++;
            tree[rt].clear();
        }
        tree[rt].sum+=val;
        if(l==r) return ;
        int mid=(l+r)>>1;
        if(pos<=mid) arr_update(tree[rt].l,l,mid,pos,val);
        else arr_update(tree[rt].r,mid+1,r,pos,val);
    }
    void arr_update(int k,int val)//将第k个数改为val预处理
    {
        int x=get_hash(a[k]),y=get_hash(val);
        a[k]=val;
        while(k<=n)
        {
            arr_update(root2[k],1,sz,x,-1);//从树状数组里先减去原值
            arr_update(root2[k],1,sz,y,1);//给新值加上1
            k+=lowbit(k);//树状数组原理更新每一个线段树
        }
    }
    int query(int ql,int qr,int l,int r,int k)//查询l~r的区间第k个数
    {
        if(l==r) return l;
        int sum=tree[tree[qr].l].sum-tree[tree[ql].l].sum,mid=(l+r)>>1;//先求出主席树的两个节点的差值
        for(int i=0; i<cntr; i++) sum+=tree[tree[rootr[i]].l].sum;//加上树状数组里右区间的前缀和,代表右区间以前的变化量
        for(int i=0; i<cntl; i++) sum-=tree[tree[rootl[i]].l].sum;//同上代表左区间的变化量,注意是减去,这才是本区间的变化量
        //sum代表的就是现在区间内的值是多少
        if(sum>=k)
        {
            for(int i=0; i<cntr; i++) rootr[i]=tree[rootr[i]].l;//树状数组所有的树节点统一向左走
            for(int i=0; i<cntl; i++) rootl[i]=tree[rootl[i]].l;
            return query(tree[ql].l,tree[qr].l,l,mid,k);
        }
        else
        {
            for(int i=0; i<cntr; i++) rootr[i]=tree[rootr[i]].r;//同上向右走
            for(int i=0; i<cntl; i++) rootl[i]=tree[rootl[i]].r;
            return query(tree[ql].r,tree[qr].r,mid+1,r,k-sum);
        }
    }
    int kth(int l,int r,int k)//查询l~r的区间第k个数预处理
    {
        cntl=cntr=0;//把树状数组里面会影响到本次查询的修改都存在数组里面
        for(int i=l-1; i; i-=lowbit(i)) rootl[cntl++]=root2[i];//左区间
        for(int i=r; i; i-=lowbit(i)) rootr[cntr++]=root2[i];//右区间
        return Hash[query(root[l-1],root[r],1,sz,k)];
    }
} ac;
int main()
{
    int ncase;
    scanf("%d",&ncase);
    while(ncase--)
    {
        scanf("%d%d",&n,&m);
        ac.init();
        for(int i=1; i<=n; i++)
            scanf("%d",&a[i]),Hash[i]=a[i];
        char c;
        for(int i=0; i<m; i++)
        {
            scanf(" %c",&c);
            if(c=='Q')
            {
                q[i].opt=0;
                scanf("%d%d%d",&q[i].i,&q[i].j,&q[i].k);
            }
            else
            {
                q[i].opt=1;
                scanf("%d%d",&q[i].i,&q[i].j);
                Hash[sz++]=q[i].j;
            }
        }
        sort(Hash+1,Hash+sz);//离散化
        for(int i=1; i<=n; i++) //建立主席树
            ac.update(root[i-1],root[i],1,sz,get_hash(a[i]),1);
        for(int i=0; i<m; i++)
        {
            if(q[i].opt==0)
                printf("%d\n",ac.kth(q[i].i,q[i].j,q[i].k));
            else
                ac.arr_update(q[i].i,q[i].j);
        }
    }
}
快速傅里叶变换(FFT)的汇编实现在DSP开发中 在数字信号处理(Digital Signal Processing,DSP)开发中,使用汇编语言实现FFT可以进一步提高计算性能和优化系统资源的使用。FFT是一种分治算法,它通过将一个长度为N的离散时间域序列分解为多个长度为N/2的子序列,然后递归地进行计算。开发者可以根据实际需求,结合具体的硬件平台和编译器工具链,对FFT的汇编实现进行优化和定制化。需要注意的是,上述示例代码中只给出了FFT的基本框架,具体的合并操作及其他细节需要根据实际需求进行实现。上述示例代码演示了一个简单的FFT汇编实现。 阅读详情

相关推荐

IC设计新手必看:如何正确使用去耦电容(decap)避免电源噪声?

本文深入探讨了IC设计中去耦电容(decap)的应用技巧,从核心原理到布局实现,帮助新手工程师有效抑制电源噪声。文章详细解析了MIM、MOM等电容类型的特性与选择策略,并提供了先进的布局技巧和验证方法,特别适用于28nm以下先进工艺的电路设计挑战。

weixin_30555125的博客 113

动态主席树(亲妈级注释)

动态主席树 本文介绍动态主席树,学习之前,你必须需要先了解静态主席树,本文只介绍相对于静态主席树多出来的部分。 动态主席树已经算是另一种数据结构了。这里以ZOJ2112为例。 首先我们需要知道主席树是一种离线数据结构,意思是我们不能一边询问一边修改或输出。所以我们把询问存储起来,这里主要是因为我们要储存改变的值,不然无法离散化,所以就离线了。这里要改变一个值,例如把2变成6,那么2的数量就要少一个,6的数量就要多一个,可我们又不能再开一个线段树,所以我们考虑将每一个节点都变成一棵树,每对他进行操作时就是对这

weixin_45563175的博客 373

Unity通用Buff系统,Buff编辑器(1,理论篇)(技能系统之Buff篇)

逻辑层根据游戏的规则和设计,控制Buff的生命周期、影响目标对象的属性或行为,以及处理Buff的交互和冲突。Buff堆叠和冲突:有些游戏中允许同类型的Buff叠加,以增加效果的强度,而有些游戏中可能不允许Buff叠加,只能由更强力的Buff来覆盖较弱的Buff。灵活个性化:每个游戏对象拥有自己的BuffManager,可以实现个体对象的独特Buff效果,增加游戏的多样性和个性化。自由控制:每个对象独立管理自己的Buff,可以自由地激活、更新和移除Buff效果,提供更精细的控制和逻辑实现。

u010082265的博客 4692

主席树 —— ③动态区间第K小(树套树,带修改主席树)

动态区间第K小 动态区间第K小,又称带修改主席树(动态主席树),对于初学真的不太友好。因为这个和静态区间第K小(静态主席树)数据结构都完全不同了。 和求静态第K小一样,我们要得到[L, R]状态的线段树,才能进行二分得到第K小。 静态主席树 是一个 可持久化线段树,每次利用 前缀和来计算[L, R]状态,但是前缀和就不便于进行修改操作了,那么对于可修改的区间求和,我们就要用到 树状数组/线段树。 ...

Plus Ultra! 1425

从零到一:Mx_yolo本地训练与K210部署实战指南

本文详细介绍了从零开始进行Mx_yolo本地模型训练到K210部署的全流程实战指南。涵盖环境配置、数据准备、模型训练与调优、模型转换及K210部署等关键步骤,并提供了常见问题解决方案和性能优化技巧,帮助开发者高效完成AI模型在嵌入式设备的落地应用。

weixin_29081163的博客 251

别再手动改文献了!手把手教你定制Mendeley的GB/T 7714-2005引用格式(附常见问题修复)

本文详细指导如何定制Mendeley的GB/T 7714-2005引用格式,解决科研文献管理中的常见问题。通过深度解析Mendeley样式编辑器,精准控制作者显示规则、出版社信息精简及期刊页码处理,实现参考文献一键合规。附常见问题修复和实战调试方法,大幅提升学术写作效率。

weixin_26833503的博客 374

主席树 (动态)图文讲解让你一次就懂 zoj2112为例

主席树(动态)学动态主席树之前一定要先会静态主席树。 静态主席树:http://blog.youkuaiyun.com/williamsun0122/article/details/77871278参考博客:http://www.cnblogs.com/Empress/p/4659824.html 这个博客讲的是对的,不过它的图和代码好像是错的,虽然能过,但应该是数据不够强,具体怎么错的它的博客下面评论有。

WilliamSun0122的博客 8314

别再到处找教程了!Windows下用FFmpeg+Mediamtx+VLC搭建本地RTSP流媒体服务器,保姆级配置流程

本文详细介绍了在Windows系统下使用FFmpeg、Mediamtx和VLC搭建本地RTSP流媒体服务器的完整流程。从环境准备到核心配置,再到推流和拉流的实战技巧,提供了保姆级的避坑指南和优化建议,帮助开发者快速实现稳定的流媒体服务部署。

weixin_42614269的博客 212

动态主席树 可修改主席树 ZOJ 2112

题意: n个数,q个询问 (n<=50000, q<=10000) Q x y z 代表询问[x, y]区间里的第z小的数 C x y 代表将(从左往右数)第x个数变成y 【样例】 1 5 3 3 2 1 4 7 Q 1 4 3 C 2 6 Q 2 5 3 这里离散化建树过程和静态主席树有一点不同,我们必须把所有询问先存起来并且把改变的数也加入到原序列中再离散化建树,会导致空间复...

精通时间管理 509

MTEX包在Matlab中实现从EBSD数据生成Abaqus网格与晶粒取向:一种对用户材料旋转矩阵分量实践的全面指南

此教程提供了一种使用MTEX Matlab包处理EBSD数据的方法,并生成Abaqus输入文件,这对于进行多晶体有限元分析具有极大的帮助。但值得注意的是,这只是一个基本的例子,实际应用中可能需要根据您的实际需求进行调整。MTEX包还提供了许多其他的功能,可以进行更复杂的分析和处理,我非常推荐您去探索。希望这篇文章能对您有所帮助,如果您有任何疑问或建议,欢迎留言交流。在接下来的文章中,我将会介绍更多关于MTEX的高级功能,敬请期待。– (完)–

qq_38334677的博客 4436

游戏引擎揭秘:大厂为何死磕自研?

游戏引擎本质与商业价值解析 游戏引擎是集成了渲染、物理、动画等核心功能的开发工具包,其价值在于让开发者免于重复编写底层代码,专注于游戏内容创作。商业引擎(如Unity/Unreal)虽降低了开发门槛,但头部厂商仍坚持自研引擎,主要基于以下考量: 经济性:长期项目分摊自研成本后,比商业引擎分成更划算; 可控性:完全掌握底层代码,能针对性优化核心玩法需求; 技术壁垒:专属引擎成为厂商的竞争优势,如米哈游的跨平台渲染技术; 项目适配:超大型游戏(开放世界/MMO)需要深度定制解决方案。 这种"短期高投入

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 263

主席树动态更新

静态主席树就是求某个区间第k大,而动态主席树就需要一边查询区间第k大,还要一边进行单点更新。 学习动态主席树需要了解的知识:静态主席树,数组数组,离线操作。 动态主席树的结构:树状数组套主席树 + 静态主席树。 题目:洛谷P2617 https://www.luogu.org/problem/P2617 代码: #include <iostream> #in...

weixin_30782331的博客 161

华南理工大学-大学物理实验-不良导体热导率测量

不良导体热导率测量 引言 导热系数(又叫热导率)是反映材料热性能的重要物理量。热传导是热交换的三种(热传导、对流和辐射)基本形式之一,是工程热物理、材料科学、固体物理及能源、环保等各个研究领域的课题。材料的导热机理在很大程度上取决于它的微观结构,热量的传递依靠原子、分子围绕平衡位置的振动以及自由电子的迁移。在金属中电子流起支配作用,在绝缘体和大部分半导体中则以晶格振动起主导作用。因此,某种材料的导热系数不仅与构成材料的物质种类密切相关,而且还与材料的微观结构、温度、压力及杂质含量相联系。在科学实验和工程设计

mohen_777的博客 871

主席树动态

以ZOJ2114为模板题。 附上此题链接 主席树的动态单点改值主要是主席树加树状数组,具体暂未理解,待熟练仔细揣摩。 代码如下 #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<al...

aixia9842的博客 188

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

动态开点与主席树

(初三写的,有、naiive,还是搬了) 一、引入(无兴趣看的可以略过) 经典例题:BRT Contract Codeforces Round #119 Div.1D 题⽬描述: ⼀条笔直的马路上有 \(n\) 个红绿灯,它们从时刻 \(0\) 开始,持续 \(g\) 秒的绿灯状态,然后持续 \(r\) 秒的红灯状态,并这样循环下去。给出每个红绿灯与马路起点处的距离 \(l_i\)。 有...

Tyl18858230607的博客 542

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

动态主席树-树状数组套主席树

原理即为用树状数组维护每个主席树的树顶 修改时修改树状数组上的经过的树顶 void update(int &rt, int l, int r, int pos, int val) { //主席树修改 if (!rt) rt = ++tot; t[rt].sum += val; if (l == r) return; ...

weixin_40588429的博客 253

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

bzoj1901 动态主席树

动态主席树,相当于树套树,,注意到我们修改的时候影响的是后面,,相当于前缀和的形式,,外层树状数组,,内部要用主席树,,自己打的,,但看的别人模板,,这样不好,,但人家的代码却是比较巧妙,,避免了很多问题,,学习吧,,注意这里修改都要动态开节点并且共用,,,这样树状数组修改才不会修改到同一个节点是不是啊,,,被这个想法卡了好久,,终于还是小恐龙喷了一下火我才明白的,,,#include<iostre

reflash的博客 1073

主席树 动态 模板

自己整理模板,仅作模板保存使用 #include <bits/stdc++.h> using namespace std; const int maxn = 6e4+5;//主席树最多需要在原空间上开大40倍,原空间本身首先要加大,这题原空间为50000 const int maxm = 1e4+5; int T[maxn],S[maxn],L[maxn*40],R[maxn*40]...

我不想打铁 283

主席树模板(动态)

主席树模板(动态) #include&lt;bits/stdc++.h&gt; using namespace std; const int N=2e6+10; int n,m,sz,tot,a[N],b[N],rt[N],s[N],ls[N*30],rs[N*30],sum[N*30],rootl[40],rootr[40],cntl,cntr; ...

Destiny 224

自进化Agent防过拟合实战:从评估黑洞到策略回滚的完整指南

在机器学习与强化学习工程实践中,过拟合一直是影响模型泛化能力的关键难题。当这一概念延伸到智能体(Agent)的自进化机制中,问题变得更加隐蔽——智能体通过闭环反馈不断调整自身策略,却可能因过度适配评估信号而陷入“越进化越偏”的困境。理解自进化过拟合的本质,掌握评估集与进化集分离、多样性约束、策略回滚等防过拟合手段,对于构建稳定可靠的Agent系统至关重要。本文从传统过拟合原理出发,分析了自进化场景下反射循环、记忆污染、评估黑洞三大风险放大器,提供了一套可直接落地的防过拟合Checklist、量化监控指标及最

weixin_34245749的博客 336
上一篇: 静态主席树
下一篇: Treap
acmer_zp
博客等级 码龄11年 18粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值