首页 > 其他分享 >【模板】ODT | Old Driver Tree | 珂朵莉树

【模板】ODT | Old Driver Tree | 珂朵莉树

时间:2023-01-29 18:45:55浏览次数:62  
标签:node insert Old int Tree ODT pos split

posted on 2021-04-02 20:38:49 | under 学术 | source

这个东西本身不常用,但是这个维护连续段的写法很常用。

标签:暴力、数据结构、std::set

#include <set>
template<class T=long long>
class ODT{
    private:
        struct node{
            int l,r;
            mutable T v;
            node(int l,int r=-1,T v=0):l(l),r(r),v(v){}
            inline bool operator<(const node &b)const{return l<b.l;}
            inline friend int rangelen(const node &a){return a.r-a.l+1;}
        };
        std::set<node> s;
        typedef typename std::set<node>::iterator IT;
    public:
        void init(int n,int *a){
            s.insert(node(n+1,n+1));
            for(int i=1;i<=n;i++) s.insert(node(i,i,a[i]));
        }
        IT split(int pos){
            IT it=s.lower_bound(node(pos));
            if(it!=s.end()&&it->l==pos) return it;
            --it;
            int l=it->l,r=it->r;
            T v=it->v;
            s.erase(it);
            s.insert(node(l,pos-1,v));
            return s.insert(node(pos,r,v)).first;
        }
        void assign(int l,int r,T v=0){
            IT R=split(r+1),L=split(l);
            s.erase(L,R);
            s.insert(node(l,r,v));
        }
//        template<class function>
//        void work(int l,int r,function work){
//            IT R=split(r+1),L=split(l);
//            for(IT it=L;it!=R;++it) work();
//        }
};

标签:node,insert,Old,int,Tree,ODT,pos,split
From: https://www.cnblogs.com/caijianhong/p/template-odt.html

相关文章

  • hexo-theme-tree
    Hexo主题Tree一个简洁的主题,主要功能是“树状导航”+“树状目录”,可选配“评论”和“阅读量”功能,支持基于搜索引擎的全站搜索。通过fancybox支持图片点击放大。......
  • linux 中awk命令从fasta文件中提取指定的scaffold数据
     awk实现001、awk实现,提取第一个scaffold[root@PC1test]#lsa.fa[root@PC1test]#cata.fa##测试数据>chr1aattccgg>chr2ttccggaaggccttg......
  • Ionic 保存图片文件异常 parent folder doesn't exist error parent folder doesn't e
    异常:使用插件Filesystem保存文件出现异常  异常引发的原因是:没有父文件存在解决方式:增加参数recursive:true(是否创建任何缺失的父目录)  可参考链接解决链接:h......
  • 域内权限维持:AdminSDHolder
    01、简介AdminSDHolder是一个特殊的AD容器,通常作为某些特权组成员的对象的安全模板。ActiveDirectory将采用AdminSDHolder对象的ACL并定期将其应用于所有受保护的AD账......
  • python-Couldn‘t find a tree builder with the features you requested: lxml
    执行BeautifulSoup(content,features='lxml')时报错,按照网上的方法安装lxml、重新安装lxml、安装指定版本lxml,都无效。最后发现只是PyCharm设置中project的pyth......
  • 二叉树的实现-BSTree
    二叉树的实现-BSTree一、树和二叉树1-1树的定义翻译过来就是:树是由结点构成的,结点可以有也可以没有。若有结点,则肯定只有一个根结点。树是一种递归结构,俗称“套娃”......
  • 【Winform】TreeView使用汇总
    1、拖拽节点到另一个容器Panel中TreeView控件需要监听:(1)ItemDrag事件(当用户开始拖动节点时发生)。对于Panel控件:(1)开启Panel的AlowDrop属性设置为true表示允许进行拖入操......
  • 「解题报告」ARC138F KD Tree
    好题!感觉比那些写出DP然后无脑上GF数学方法硬推的题有价值。首先有个朴素的想法:设\(f_{l,r,u,d}\)表示这个矩形的方案数,那么枚举分界点转移。引用大佬的话:直......
  • 浅谈树上启发式合并(Dsu on tree)
    树上启发式合并树上启发式合并(Dsuontree),是一个解决树上离线问题的有力算法,一般的复杂度是\(\mathcalO(n\logn)\)(假定转移可以\(\mathcalO(1)\)解决),时间复杂度相比......
  • RTree源代码——C语言实现
    RTree源代码——C语言实现cheungmine一、什么是RTree“R树是B树向多维空间发展的另一种形式,它将空间对象按范围划分,每个结点都对应一个区域和一个磁盘页,非叶结点的磁盘页中......