珂朵莉树

set<re>::iterator split(int x)
{
    auto it=S.upper_bound({x});
    it--;
    int l=it->l,r=it->r,k=it->k;
    if (it->l!=x)
    {
        S.erase(it);
        S.insert({l,x-1,k});
        return S.insert({x,r,k}).first;
    }
    return it;
}
ll ans[N];
int get_c(int x)
{
    auto it=S.upper_bound({x});
    it--;
    return it->k;
}
set<re>::iterator gao(int x)
{
    auto it=S.upper_bound({x}); it--;
    while (1)
    {
        auto it2=next(it);
        if (it2!=S.end()&&it2->k==it->k)
        {
            int r=it2->r; S.erase(it2);
            it->r=r;
        } else break;
    }
    while (it!=S.begin())
    {
        auto it2=prev(it);
        if (it2->k==it->k)
        {
            int l=it2->l; S.erase(it2);
            it->l=l;
        } else break;
    }
    return it;
}
View Code

 

posted @ 2022-08-05 15:29  尹吴潇  阅读(69)  评论(0编辑  收藏  举报