首页 > 其他分享 >主席树

主席树

时间:2024-02-04 12:44:23浏览次数:29  
标签:rs int res mid dat ls 主席

主席树

定义

可持久化的线段树

实现

void mkrt(int &p,int q){
    int tmp = mknode();
    t[tmp] = t[q];
    p = tmp;
}
void pushup(int p){
    t[p].dat = t[t[p].ls].dat+t[t[p].rs].dat;
}
void modify(int &p,int L,int R,int x,int v){
    if(!p)p=mknode();
    if(L==R){
        t[p].dat += v;
        return;
    }
    int mid=L+R>>1;
    if(x<=mid)mkrt(t[p].ls,t[p].ls),modify(t[p].ls,L,mid,x,v);
    else mkrt(t[p].rs,t[p].rs),modify(t[p].rs,mid+1,R,x,v);
    pushup(p);
}
int query(int p,int q,int L,int R,int v){
    if(L==R){//搞清楚访问的是区间还是点 
        return t[p].dat-t[q].dat>=v?L:0;
    }
    int mid=L+R>>1;
    int res=0;
    if(t[t[p].ls].dat-t[t[q].ls].dat>=v)res = query(t[p].ls,t[q].ls,L,mid,v);
    if(res)return res;
    if(t[t[p].rs].dat-t[t[q].rs].dat>=v)res = query(t[p].rs,t[q].rs,mid+1,R,v);
    if(res)return res;
    return res; 
}

参考资料

Oi-wiki

Zhihu

标签:rs,int,res,mid,dat,ls,主席
From: https://www.cnblogs.com/life-of-a-libertine/p/18005969

相关文章

  • 主席树(可持久化线段树)
    主席树前言主席树也是一种数据结构,是线段树的进阶,作用是可以保留历史版本,支持回退,就是回到之前某个未修改的状态。就像我们在写博客时如果误删了重要的内容,就可以用Ctrl+z撤回一次操作,也可以用Ctrl+Shift+z还原我们撤回的操作,这就需要存下每次编辑的操作。基本原理可......
  • 主席树
    structZXS{ inttot=0; TREEtr[N*32]; intxin(intp){ tot++,tr[tot]=tr[p]; returntot; } voidup(intp){ intls=tr[p].ls,rs=tr[p].rs; tr[p].val=tr[ls].val+tr[rs].val; } intbuild(intp,intl,intr){ p=++tot; if(l==r){ tr[p].val=0; ......
  • [学习笔记]主席树(可持久化权值线段树)
    主席树简介主席树,全称为可持久化权值线段树。有的人不知道什么是可持久化,其实很好理解,就是某个mhy游戏最早是1.0版本,至今到了4.2版本,可持久化就是可以在1.0~4.2版本间任选一个版本出来进行修改。例题1P3919【模板】可持久化线段树1(可持久化数组)题意分析需要写一......
  • 理解线段树和主席树:解决区间操作的利器
    在计算机科学和算法领域,区间操作问题是一类常见且重要的问题,它们涉及到在一维数据结构中执行查询和更新操作。线段树和主席树是两种用于解决这类问题的强大数据结构。本文将介绍这两种树状数据结构,以及它们在不同应用领域中的使用。什么是线段树?线段树是一种用于处理区间操作问......
  • 详解主席树与二维数点问题
    主席树与二维数点问题前言:自己在网上搜索了很久,都没有看到具体是怎么维护的,下课问了下,一下就点醒了。正文:先考虑主席树和二维数点有什么关系。我们可以将y轴看成一个时间轴。我们查询y1-y2之间的数字时,其实就是查询这些版本下的x1-x2的区间和,最后由于可加性,直接差分相减即可......
  • 齿轮加工刀片,原机械工业部副部长、国务院中央大型企业监事会主席贾成炳一行莅临成都工
    成都工具研究所有限公司的前身是成都工具研究所,于1956年创建于北京,是原机械工业部的直属研究所,是我国机械工业的综合性工具科研机构。公司官网:http://www.ctri.com.cn/公司主要从事精密切削工具、精密测量仪器以及表面改性处理技术的技术研究、产品开发和应用服务。8月22日,原机械......
  • 主席树
    //动态开点可持久化权值线段树#include<bits/stdc++.h>usingnamespacestd;constintN=2e5+5;structSegmentree{intls,rs,sum;}t[N<<5];intrt[N],tot=0,n,m,a[N],b[N],p;//p含义为修改点voidbuild(intp,intl,intr){p=++tot;if(l==r)return;......
  • BLOG1029<-主席树,
    这个比splay好学多了(主席树就是把每次修改的版本保留下来,版本就是线段树曾经的一个状态。如果打暴力的话可以想把每个状态的线段树都保留下来,炸飞了。主席树单点修改的话就是发现了每次修改只改了包含这个点的层,线段树上,这是\(\logn\)级的,我们可以只创建这些新节点。每次修......
  • 2023 年 CCPC 网络预选赛 L.Partially Free Meal (主席树)
    传送门先插个图玩云顶之弈。#include<iostream>#include<cstring>#include<algorithm>#include<vector>#definelllonglong#definefsfirst#definesesecondconstlongdoubleeps=1e-9;constintN=2e5+10,M=2e5+10;constintM......
  • 主席树(更新)
    主席树学习(无详细讲解过程,因为思想很简单)目录主席树学习背景:可持久化线段树(主席树)模板:静态区间第k大更多应用:(其实就是加了一点其他模板)和树dfs一起出:一些总结:更新内容(2023/10/25)区间修改(持久化tag)背景:sensi:今天咱们做一下优化dp,你们看看这个简单题。https://www.luogu.c......