bzoj 3217 ALOEXT 替罪羊树套trie树

实战ByteTrack:用C++手把手教你实现多目标跟踪(附完整代码解析) 本文通过C++实战教程,手把手教你实现ByteTrack多目标跟踪算法。文章详细解析了算法核心,包括利用卡尔曼滤波进行状态预测、匈牙利算法完成数据关联,以及ByteTrack独特的三次匹配策略来有效处理低置信度检测框,并提供了完整的项目架构、代码实现与性能优化指南。 阅读详情

感觉又刚了一遍带插入区间k小值。。。
这题写个替罪羊练一下。其实应该可以用重量平衡的treap套trie。

带插入维护一段区间的trie和次小值。
区间次小值随便维护,区间trie呢?
我会做!替罪羊套trie!
不过写到一半你会发现这题还有删除。

treap删点直接旋到下面删。那替罪羊怎么删?
直接重构?每次删中间的点就挂了。
打标记? 似乎会有很多特判。
只要像线段树一样建就好了。把所有的表示元素的点都放在叶节点,其他点都是空点。只维护子树中所有叶节点形成的trie。
插入时新建两个点,删除时直接删除叶节点。
查询时像线段树一样找到log个区间,然后类似主席树地跑。

#include <bits/stdc++.h>
using namespace std;
#define A 20
#define alp 0.93
#define N 1100000
#define M 35000000
#define ls(x) ch[x][0]
#define rs(x) ch[x][1]
#define which(x) (ch[fa[x]][1]==x)
int a[N],n,m,n0,ans;
int st[210],top;
char s[11];
struct Trie
{
    int ch[M][2],num[M],cnt;
    queue<int>q;
    int ap()
    {
        if(!q.empty())
        {
            int ret=q.front();q.pop();
            ls(ret)=rs(ret)=0;num[ret]=0;
            return ret;
        }
        return ++cnt;
    }
    void del(int x)
    {
        if(!x)return;
        q.push(x);
        del(ls(x));del(rs(x));
    }
    void insert(int &now,int v,int deep,int tp)
    {
        if(!now)now=ap();
        num[now]+=tp;
        if(deep==-1)return;
        if(v>>deep&1)insert(rs(now),v,deep-1,tp);
        else insert(ls(now),v,deep-1,tp);
    }
    int merge(int x,int y)
    {
        if(!x&&!y)return 0;
        int ret=ap();
        ls(ret)=merge(ls(x),ls(y));
        rs(ret)=merge(rs(x),rs(y));
        num[ret]=num[x]+num[y];
        return ret;
    }
    int query(int x,int deep)
    {
        if(deep<0)return 0;
        int t=x>>deep&1,sum=0;
        for(int i=1;i<=top;i++)
            sum+=num[ch[st[i]][t^1]];
        for(int i=1;i<=top;i++)
            st[i]=ch[st[i]][sum ? t^1:t];
        return query(x,deep-1)+(sum ? 1<<deep:0);
    }
}tr1;
struct node
{
    int mx,sx;
    node(){}
    node(int mx,int sx):mx(mx),sx(sx){}
    void ins(int x)
    {
        if(x>mx)sx=mx,mx=x;
        else if(x>sx)sx=x;
    }
};
node merge(node r1,node r2)
{
    node ret=r1;
    ret.ins(r2.mx);ret.ins(r2.sx);
    return ret;
}
struct Sheep
{
    queue<int>q;
    int ch[N][2],size[N],root[N],fa[N],val[N],sz[N],bj[N];
    int cnt,rt,fre,pre,tar;
    node v[N],n1;
    int ap()
    {
        if(!q.empty())
        {
            int t=q.front();q.pop();
            ls(t)=rs(t)=size[t]=root[t]=fa[t]=val[t]=bj[t]=0;
            v[t]=node(0,0);
            return t;
        }
        return ++cnt;
    }
    int newnode(int x)
    {
        int ret=ap();bj[ret]=1;
        val[ret]=x;size[ret]=sz[ret]=1;
        v[ret]=node(x,0);
        tr1.insert(root[ret],x,A,1);
        return ret;
    }
    void pushup(int x)
    {
        size[x]=size[ls(x)]+size[rs(x)];
        sz[x]=size[x]+1;
        root[x]=tr1.merge(root[ls(x)],root[rs(x)]);
        v[x]=merge(v[ls(x)],v[rs(x)]);
        fa[ls(x)]=fa[rs(x)]=x;
    }
    int build(int l,int r)
    {
        if(l>r)return 0;
        if(l==r)return newnode(a[l]);

        int mid=(l+r)>>1,ret=ap();
        ls(ret)=build(l,mid);
        rs(ret)=build(mid+1,r);
        pushup(ret);
        return ret;
    }
    void dfs(int x)
    {
        if(!x)return;
        q.push(x);tr1.del(root[x]);
        if(bj[x]){a[++n]=val[x];return;}
        dfs(ls(x));dfs(rs(x));
    }
    void reb(int x)
    {
        tr1.del(root[x]);
        n=0;dfs(ls(x));dfs(rs(x));
        int t=build(1,n);
        if(x==rt)rt=t;
        fa[t]=fa[x];
        ch[fa[x]][which(x)]=t;
    }
    void insert(int &now,int x,int y)
    {
        if(size[now]==1||!now)
        {
            int t=newnode(y),ret=ap();
            fa[ret]=pre;ls(ret)=t;rs(ret)=now;
            pushup(ret);now=ret;
            return;
        }
        pre=now;
        if(size[ls(now)]>=x)insert(ls(now),x,y);
        else insert(rs(now),x-size[ls(now)],y);

        tr1.insert(root[now],y,A,1);
        v[now].ins(y);size[now]++;sz[now]+=2;

        fa[ls(now)]=fa[rs(now)]=now;
        if(max(sz[ls(now)],sz[rs(now)])>sz[now]*alp)
            fre=now;
    }
    void del(int &now,int x)
    {
        if(bj[now])
        {q.push(now);tar=val[now];now=0;return;}

        if(size[ls(now)]>=x)del(ls(now),x);
        else del(rs(now),x-size[ls(now)]);

        tr1.insert(root[now],tar,A,-1);
        v[now]=merge(v[ls(now)],v[rs(now)]);
        size[now]--;sz[now]--;

        fa[ls(now)]=fa[rs(now)]=now;
        if(max(sz[ls(now)],sz[rs(now)])>sz[now]*alp)
            fre=now;
    }
    void insert(int x,int y)
    {
        fre=0;insert(rt,x,y);
        if(fre)reb(fre);
    }
    void del(int x)
    {
        fre=0;del(rt,x);
        if(fre)reb(fre);
    }
    void find(int now,int pre,int x,int y)
    {
        if(pre+1>=x&&pre+size[now]<=y)
        {
            st[++top]=root[now];
            n1=merge(n1,v[now]);
            return;
        }
        if(pre+size[ls(now)]>=x)
            find(ls(now),pre,x,y);
        if(pre+size[ls(now)]<y)
            find(rs(now),pre+size[ls(now)],x,y);
    }
    node find(int x,int y)
    {
        top=0;n1=node(0,0);
        find(rt,0,x,y);
        return n1;
    }
}tr2;
int main()
{
    scanf("%d%d",&n,&m);n0=n;
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    tr2.rt=tr2.build(1,n);
    for(int x,y;m--;)
    {
        scanf("%s",s);
        if(s[0]=='I')
        {
            scanf("%d%d",&x,&y);
            x=(x+ans)%n0+1;y=(y+ans)%(1<<A);n0++;
            tr2.insert(x,y);
        }
        else if(s[0]=='D')
        {
            scanf("%d",&x);
            x=(x+ans)%n0+1;n0--;
            tr2.del(x);
        }
        else if(s[0]=='C')
        {
            scanf("%d%d",&x,&y);
            x=(x+ans)%n0+1;y=(y+ans)%(1<<A);
            tr2.del(x);
            tr2.insert(x,y);
        }
        else
        {
            scanf("%d%d",&x,&y);
            x=(x+ans)%n0+1;y=(y+ans)%n0+1;
            node t=tr2.find(x,y);
            printf("%d\n",ans=tr1.query(t.sx,A));
        }
    }
    return 0;
}
Debian 11 下用hostapd+dnsmasq搭建WiFi热点:从命令行到实战(避坑指南) 本文详细介绍了在Debian 11系统上,使用hostapd和dnsmasq从命令行搭建稳定WiFi热点的完整实战流程。内容涵盖环境准备、无线网卡AP模式检查、服务深度配置,并重点提供了从服务启动失败到客户端无法上网等常见问题的系统性排错指南,帮助用户避开配置陷阱,成功创建可用的无线接入点。 阅读详情

相关推荐

Unity集成阿里Qwen2.5-Omni全模态大模型实战:语音交互与多模态AI开发指南

本文详细介绍了在Unity中集成阿里Qwen2.5-Omni全模态大模型的实战指南。通过C#脚本开发,实现语音交互、图像分析等多模态AI功能,涵盖API调用、音频处理、流式响应解析等核心步骤,为游戏、虚拟人等Unity应用提供沉浸式智能交互解决方案。

weixin_29005499的博客 315

BZOJ 3217: ALOEXT(块状链表+Trie树)

题目 又是一道分块踩爆 log⁡2\log^2log2的经典题目。 因为有插入,用块状链表就行了。 对于每个块维护一个Trie树维护01串,一个SET维护次大值(其实是我懒得自己用分块写)。 Trie树这个东西其实对分块很不友好的,他修改查询都是log⁡\loglog,无法通过平衡分块复杂度来得到更好的结果。 修改直接插入块内的TrieO(log⁡n)O(\log n)O(logn), 询问暴力询...

Freopen的博客 313

VisualSFM+MeshLab 三维重建全过程记录

VisualSFM+MeshLab 三维重建全过程记录,从下载到运行出结果,以及其中一些可能出现的小问题。通过这两个软件熟悉一下多目立体视觉重建的流程。

何似莫相逢 3万+

BZOJ 3217: ALOEXT (块状链表套trie)

第一次写块状链表,发现还挺好写的,但是一点地方写错加上强制在线就会各种姿势WA/TLE/RE爆… 想法就是分块后,在每一个块上维护最大值和次大值,还在每一个块上维护一棵trie树来求异或最大值.散块直接暴力…这想法暴力吧…这道题不用考虑合并,因为最多分出(n+q)/Bsz块.详细的做法如下 对于修改一个数,首先在该块的trie数中删除该数(直接伪删,也就是让那一条路径上每个点的cnt都减1),然...

Ark 428

大语言模型无代码构建知识图谱概述

由示例可以看出,大语言模型的泛化能力能够非常精准的抽取文本中的实体、关系等知识信息。其能够大大提升知识提取的效率与准确性。HuggingFists低代码平台的出现进一步促进了知识图谱构建的效率。它大幅降低了知识图谱构建人员的技术要求,使得从事该工作的人员有了更大的选择范围。不断下降的构建成本,意味着可以有更多的客户享受到知识图谱带来的业务价值。

colorknight的专栏 1817

2021年全国职业院校技能大赛高职组网络系统管理赛项

S1 Ruijie(config)#switch virtual domain 1 Ruijie(config-vs-domain)#switch 1 Ruijie(config-vs-domain)#switch 1 priority 150 Ruijie(config-vs-domain)#switch 1 description S1 Ruijie(config-vs-domain)#exit Ruijie(config)#vsl-port Ruijie(config-vsl-port)#po

bfq05234214的博客 1133

替罪羊树ScapeGoatTree&&(【luogu3369&&bzoj3324】普通平衡树)

先放一份代码,之后补一下。。 =====================我是萌萌哒分割线======================== 扯淡     NOIP已经过去,接下来将是省选的季节,于是想要学点数据结构啊啥的涨一涨自己的姿势水平,然后忽然看到一种数据结构叫替罪羊树,感觉非常有趣,于是就点进去学了学。参考来源戳这 正文 前言     我们知道,对于一颗二叉搜索树,最重要的就

Ephemeral 1130

eCognition易康面向对象分类批量选择样本,批量导出shp

可以的,使用这个工具条最右边那个三角尺manual editing toolbar,这是用来直接指定类别的,咱们可以拿它选完以后把指定的类别转成训练样本。另一个好处是,这个选出来的样本可以直接导出成shp,但select sample是不可以的,只能导出TTAMask也就是栅格掩膜。如果要导出shp,要在转之前导出。中间那条有点点的红线就是我的鼠标轨迹,只要碰到的对象就会全部选中,然后一点3的那个按钮就直接全部划分为林地了,十分丝滑。在弹出来的工作条里,首先选择你的类别,比如这里选一个forest。

qq_61845364的博客 4070

平衡树及笛卡尔树讲解(旋转treap,非旋转treap,splay,替罪羊树及可持久化)

在刷了许多道平衡树的题之后,对平衡树有了较为深入的理解,在这里和大家分享一下,希望对大家学习平衡树能有帮助。 平衡树有好多种,比如treap,splay,红黑树,STL中的set。在这里只介绍几种常用的:treap、splay和替罪羊树(其中treap包括旋转treap和非旋转treap)。 一、treap treap这个词是由tree和heap组合而成,意思是树上的的堆(其实就是字面意思啦...

weixin_33875564的博客 392

LangGraph 实战教程:搭建一个智能办公多Agent协作平台

只存储必要的信息:不要把所有的原始数据都存储在状态中,比如销售数据可以存储在数据库或向量数据库中,状态中只存储数据的 ID 或摘要。使用类型提示:避免类型错误,提高代码的可维护性。支持增量更新:LangGraph 默认支持状态的增量更新(通过reduce函数),比如messages列表可以通过追加新消息的方式更新,而不是每次都重新创建整个列表。Normal Edge 的定义非常简单,只需要在StateGraph对象(稍后会详细讲解)上调用add_edge# 创建一个 StateGraph 对象。

SuperAGI2025 221

华为OD机试 - 音乐小说内容重复识别 - 并查集(Java 双机位C卷 200分)

华为OD机试 双机位C卷题库疯狂收录中,刷题。

学Java,找哪吒 159

BZOJ3217 ALOEXT

3217: ALOEXT Time Limit:25 SecMemory Limit:512 MB Description taorunz平时最喜欢的东西就是可移动存储器了……只要看到别人的可移动存储器,他总是用尽一切办法把它里面的东西弄到手。 突然有一天,taorunz来到了一个密室,里面放着一排可移动存储器,存储器里有非常珍贵的OI资料……不过比较特殊的是,每个存储器上...

weixin_34128411的博客 180

【Halcon-2D测量】add_metrology_object_rectangle2_measure 函数功能(用于向2D计量模型中添加旋转矩形(rectangle2类型)计量对象)

HALCON算子add_metrology_object_rectangle2_measure解析摘要 该算子是HALCON 2D计量模块的核心算子,用于添加旋转矩形计量对象并配置测量参数。主要功能包括:定义旋转矩形几何轮廓(中心坐标、主轴角度、长短半长);生成垂直于矩形边界的测量区域;设置边缘提取预处理参数(高斯平滑、振幅阈值)。关键注意事项:MeasureLength1必须小于矩形长短半长;角度参数Phi需使用弧度单位;多线程需同步模型句柄。该算子适用于方形螺母、PCB板边框等矩形零件的精密测量,需与a

weixin_45590420的博客 1223

BZOJ 3217 ALOEXT 替罪羊树套Trie树

题目大意:维护一个序列,支持以下操作: 1.在某个位置插入一个数 2.删除某个位置上的数 3.修改某个位置上的数 4.求某段区间中的次大值与区间中另一个数的异或值的最大值 强制在线 替罪羊树套Trie树。。。终于尼玛A了。。。7.4KB的大代码啊- - 插入和修改同带插入区间k小值 删除要打标记不能直接删 删除的时候注意 删除导致的不平衡不要重建 否则复杂度无法保证 因此每个节点

世界 2718

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【bzoj3217】ALOEXT 替罪羊树套Trie树

题目描述 taorunz平时最喜欢的东西就是可移动存储器了……只要看到别人的可移动存储器,他总是用尽一切办法把它里面的东西弄到手。 突然有一天,taorunz来到了一个密室,里面放着一排可移动存储器,存储器里有非常珍贵的OI资料……不过比较特殊的是,每个存储器上都写着一个非负整数。taorunz很高兴,要把所有的存储器都拿走(taorunz的智商高达500,他一旦弄走了这里的所有存储器,在不久...

weixin_30338481的博客 98

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

BZOJ 3600 替罪羊树+线段树

思路: 当然是抄的黄学长的题解啦//By SiriusRen #include <cstdio> #include <algorithm> using namespace std; #define N 500005 int n,m,rt,R,top,id[N],mx[N],pos[N]; double a[N];char ch[11]; struct data{ int l,r;

SiriusRen的博客 675

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

bzoj3217 ALOEXT 替罪羊树套trie

Description 给定一个序列,要求兹磁一下操作 插入一个数 删除一个数 修改一个数 查询区间次大值与另一数字异或的最大值 Solution 都是套路。。真·oi中的解析几何 唯一需要注意的就是替罪羊树上删除只打标记,我们重构的时候才真正删除,并且我写的做法需要同时维护包含删除节点的s和不包含删除节点的size,根据s判断是否重构 我也就写了6k+,我爱数据结构.jpg Code ...

olahiuj的博客 297

bzoj 3217: ALOEXT 替罪羊树套trie

题意给你一个数列,要求资瓷四个操作: 插入一个数 删除一个数 修改一个数 给出一个区间[l,r],设w为区间内第二大,问w与区间内元素异或的最大值。 n,m<=100000,元素大小小于2^20,强制在线分析都是套路题。直接外层替罪羊树内层trie就好了。注意要垃圾回收。 第一次写替罪羊树的删除操作。一开始想的是用删除节点的后继来替代删除节点,然后写的我一度开始怀疑人生。后来才知道替罪羊

beginend 558

BZOJ 3217 ALOEXT

题面 Description taorunz平时最喜欢的东西就是可移动存储器了……只要看到别人的可移动存储器,他总是用尽一切办法把它里面的东西弄到手。 突然有一天,taorunz来到了一个密室,里面放着一排可移动存储器,存储器里有非常珍贵的OI资料……不过比较特殊的是,每个存储器上都写着一个非负整数。taorunz很高兴,要把所有的存储器都拿走(taorunz的智商高达500,他一旦弄走...

dk810510的博客 168

【BZOJ3217】ALOEXT 替罪羊树+Trie树

【BZOJ3217】ALOEXT Description taorunz平时最喜欢的东西就是可移动存储器了……只要看到别人的可移动存储器,他总是用尽一切办法把它里面的东西弄到手。 突然有一天,taorunz来到了一个密室,里面放着一排可移动存储器,存储器里有非常珍贵的OI资料……不过比较特殊的是,每个存储器上都写着一个非负整数。taorunz很高兴,要把所有的存储器都拿走(taorunz...

weixin_30332241的博客 106

【BZOJ3217】ALOEXT-暴力重构线段树-替罪羊树-Trie树-树套树-10k大代码(+数据生成器)...

Problem ALOEXT 题目大意 给出一个数据结构维护一个数列,要求支持以下操作: 向数列中某个位置插入一个数 将数列中某个位置的数删除 将数列中某个位置的数换成另外一个数 查询一段区间内的次大值与这段区间内整数的异或最大值 要求强制在线。 Solution 看到这个题目以后我们脑子里弹出了许许多多种数据结构。 首先我们看到维护一个数列支持区间查找删除操...

dichengting7485的博客 332

bzoj3217 ALOEXT

替罪羊套$01Trie$ 一看就是傻逼树套树,后来一直$MLE$,发现有内存没删干净。删了之后$TLE$,$Trie$重载$new$和$delete$了就快的飞起了。 1 #include<cstdio> 2 #include<iostream> 3 #include<vector> 4 #define N 200050 ...

weixin_34273481的博客 118

【BZOJ3217】ALOEXT

【题目链接】点击打开链接【思路要点】替罪羊树套权值线段树。时间复杂度\(O(NLog^2N)\)。由于常数较大,笔者的代码无法在BZOJ上通过。【代码】/*TLE of Large Constant*/ #include&lt;bits/stdc++.h&gt; using namespace std; #define MAXN 400005 #define MAXV 1048576 #defin...

cz_xuyixuan的博客 479

BZOJ3217 : ALOEXT

替罪羊树套Trie,Trie合并用线段树合并,注意常数优化。   顺便AC800题纪念~~~   #include&lt;cstdio&gt; #include&lt;cmath&gt; #include&lt;algorithm&gt; using namespace std; const int N=200010,inf=19,M=32000010; struct inf...

weixin_33908217的博客 158

[bzoj3217]ALOEXT

  被这题虐了快两天。。。。。。。。。。。。   找最大的异或值显然用trie。。因为还要支持插入删除修改。。所以就用平衡树套trie。   如果旋转的话,整颗trie都要重新建,所以正常姿势是替罪羊树(虽然只是早建晚建的区别= =)   看了学长的解题报告后才敢用treap= =。。结果就陷入了无尽的调试中TAT..代码能力还是拙计...前前后后改了两天,大概得有8h+吧。。。  ...

weixin_30783913的博客 99
上一篇: bzoj 3207 花神的嘲讽计划Ⅰ hash 莫队
下一篇: bzoj 3230 相似子串 后缀数组
make_it_for_good
博客等级 码龄11年 13粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值