首页 > 其他分享 >珂朵莉树ODT 模板

珂朵莉树ODT 模板

时间:2024-03-21 23:22:52浏览次数:20  
标签:itl int auto ODT pos 朵莉树 split itr 模板

构造 set :

struct node{
    int l , r;
    mutable int v;
    node(int l,int r,int v = 0) : l(l) , r(r) , v(v) {}
    bool operator<(const node &a) const {
        return l < a.l;
    }
};
set<node> s;

分裂 set :

auto split(int pos) {
    auto it = s.lower_bound(node(pos , 0 , 0));
    if(it != s.end() && it->l == pos) return it;
    it --;
    if(it->r < pos) return s.end();
    int l = it->l;
    int r = it->r;
    int v = it->v;
    s.erase(it);
    s.insert(node(l , pos - 1 , v));
    return s.insert(node(pos , r , v)).first;
}

推平区间:

void pushdown(int l,int r,int x) {
    auto itr = split(r + 1) , itl = split(l);
    s.erase(itl , itr);
    s.insert(node(l , r , x));
}

void add(int l,int r,int x) {
    auto itr = split(r + 1) , itl = split(l);
    for(auto it = itl;it != itr;it++)
        it->v += x;
}

Rank 结构体定义:

struct Rank {
    int num , cnt;
    Rank(int num , int cnt) : num(num) , cnt(cnt) {}
    bool operator<(const Rank &a) const {
        return num < a.num;
    }
};

区间 第x小 :

int rnk(int l,int r,int x) {
    auto itr = split(r + 1) , itl = split(l);
    vector<Rank> v;
    for(auto i = itl;i != itr;i++)
        v.push_back(Rank(i->v , i->r - i->l + 1));
    sort(v.begin() , v.end());
    int flag = v.size() - 1;
    for(int i=0;i < v.size();i++)
        if(v[i].cnt < x) x -= v[i].cnt;
            else {
                flag = i;
                break;
            }
    return v[flag].num;
}

区间每个数 x次方 求和:

int calp(int l,int r,int x,int y) {
    auto itr = split(r + 1) , itl = split(l);
    int ans = 0;
    for(auto i = itl;i != itr;i++)
        ans = (ans + ksm(i->v , x , y) * (i->r - i->l + 1) % y) % y;
    return ans;
}

标签:itl,int,auto,ODT,pos,朵莉树,split,itr,模板
From: https://www.cnblogs.com/NEUQ-zyb/p/18088453

相关文章

  • 算法模板 v1.10.2.20240320
    算法模板v1.1.1.20240115:之前历史版本已不可寻,创建第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”;删除“编译”-“手动开O优化”;修改“编译”-“CF模板”;删除“读写”;删除“图论”-“欧拉图”-“混合图”;删除“图论”-“可达性统计”;删除“数据类型”-“高精类”。......
  • c++模板
    前言大家好,我是jiantaoyab,这篇文章给大家带来c++模板的介绍,模板是泛型程序设计的基础,模板就是类或者函数的蓝图,后一篇文章我将开始介绍STL,模板在STL中大量的运用。模板分为函数模板和类模板函数模板格式template<typenameT1,typenameT2,......,typenameTn>//参数......
  • 分享600套常用的手机网站模板,总有一款适合你
    600套手机网站模板分享:总有一款适合你!演示效果及下载地址:https://www.erdangjiade.com/templates/0-0-108-0-0-01、你先注册好一个帐号,然后私聊找我,我帮你充好积分,2、整站资源就可以直接下载了3、如果有一天,你成为技术大神,你会不会想起,那个曾经指点过你的朋友手机网站已......
  • Angular React Vue 比较 – 模板篇
    如果我们把组件篇比做是前端的JavaScript,那么模板篇则是HTML。三大框架中的模板在应用中呈现用户界面,就像常规HTML一样,但是它具有更多功能。Angular的模板在Angular中,*template* 是HTML的一个块。在模板中我们可以使用Angular的语法来构建更多的功能。编写......
  • 3、模板渲染及对象属性访问
    代码如下:fromflaskimportFlask,render_templateapp=Flask(__name__)#定义类用于参数传递classUser:"""对于参数age是后续加上去的,因为前期已经对于类进行过实例化了,所以在增加参数时,最好给上一个默认值.不然之前的写法都要重新修改."""......
  • 题解 P5809【【模板】多项式复合逆】
    \(\text{Link}\)力求把最新技术翻译地人人都能看懂。推荐先学习:拉格朗日反演。题意给出\(n\)次多项式\(F(x)\),求一个\(n\)次多项式\(G(x)\)满足\(F(G(x))\equivx(\bmodx^{n+1})\)。保证\([x^0]F(x)=0\)且\([x^1]F(x)\ne0\)。\(n\le2\times10^4\)。思路我们......
  • uniapp 开发模板
    简介vue3-uniapp-template是基于vue3的uniapp快速开发模板,包含状态管理、网络请求、路由拦截、UI组件等常用功能。主要使用的技术栈:uniapp、vue3、pinia、vite、uv-ui下载地址PS:如果对你有帮助的话,点个Star支持下哈~GithubGitee项目启动#克隆代码gitclonehttps://gi......
  • C++模板实现之谜:为何只能在头文件中?解密原因与高级分离技术
     概述:C++中模板必须在头文件中实现,因为编译器需要可见的实现以生成模板具体实例的代码。通过头文件,确保模板在每个编译单元中都能被正确展开,提高可维护性。在C++中,模板只能在头文件中实现的主要原因是编译器在使用模板时需要生成对应的代码,而这部分代码必须在编译时可见。以......
  • C++ 函数模板
    C++函数模板函数模板在C++中,函数模板是一种允许函数以一种类型无关的方式来操作的工具。它们使得函数能够处理不同类型的数据而不需要为每种类型编写重复的代码。函数模板的核心思想是“参数化类型”,这意味着在定义函数时,可以使用一个或多个通用类型参数,而在函数被调用时......
  • C++ 模板入门详解
    目录0.模板引入1.函数模板 1.函数重载的缺点 2.函数模板的概念和格式2. 函数模板的实例化 2.1 隐式实例化:让编译器根据实参推演模板参数的实际类型 2.2 显式实例化:在函数名后的<>中指定模板参数的实际类型2.3函数模板参数的匹配规则 3.类模板 3.1类......