权值线段树
线段树这种数据结构一般用于区间操作的题目之中,比如区间修改或者区间查询,但当我们想要针对值的数量等信息时,就会用到权值线段树,其本质就是建立在桶上的线段树。
其代码和普通线段树没有什么区别,但其功能有些不同:
1.查询某个元素的排名:
#define ls id<<1
#define rs id<<1|1
int query_id(int id,int l,int r,int x){
if(l==r)return 1;
int mid=(l+r)>>1;
if(x<=mid)return query_id(ls,l,mid,x);
else return t[ls]+query_id(rs,mid+1,r,x);
}
2.查询排名第
#define ls id<<1
#define rs id<<1|1
int query_nm(int id,int l,int r,int x){
if(l==r)return f[l];
int mid=(l+r)>>1;
if(x<=t[ls])return query_nm(ls,l,mid,x);
else return query_nm(rs,mid+1,r,x-t[ls]);
}
其他的都和普通线段树一样
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】