首页 > 其他分享 >九下五月上旬日记

九下五月上旬日记

时间:2024-05-01 10:11:50浏览次数:29  
标签:rt 线段 luogu sum tree 日记 上旬 五月 ll

5.1

闲话

做题纪要

luogu P3521 [POI2011] ROT-Tree Rotations

  • What is 先序遍历 ?

  • 对于一棵子树的根节点 \(x\) ,交换其左右子树,不会对以前的节点产生影响(不会更改贡献)。

  • 这棵子树产生的贡献值来自三种情况,分别是都在左子树,都在右子树,左子树和右子树各一个。只考虑第三种情况的求解,前两种可以递归处理。

  • 对于每个叶子节点建立权值线段树并依次向上合并。

    • 动态开点权值线段树加线段树合并板子。
      • 设两棵线段树分别为 \(A,B\) ,从根节点开始递归合并。
      • 递归到非叶子节点时,如果 \(A\) 树或 \(B\) 树上的对应节点为空,则直接返回另一个树上对应节点;递归到叶子节点时,直接合并(要符合区间可加性);否则,选一个节点作为合并之后的点,用另一个点来更新信息。
        • 一般情况下为节省空间,不再新开线段树而直接在其中一棵线段树上修改。
      • 时空复杂度为 \(O(m \log_{2} V)\) ,其中 \(V\) 是值域,一般情况有 \(n,m\) 同阶,故常写作 \(O(n \log_{2} V)\) 。
  • 在权值线段树合并过程中,由于 \(rt_{1},rt_{2}\) 所代表的区间是同一个区间,故 \(rt_{1}\) 的右子树一定比 \(rt_{2}\) 的左子树大。此时交换其左右子树产生的贡献为 \(sum_{rson_{rt_{1}}} \times sum_{lson_{rt_{2}}}\) ,不交换其左右子树产生的贡献为 \(sum_{lson_{rt_{1}}} \times sum_{rson_{rt_{2}}}\) 。最终两者取 \(\min\) 即可。

  • LibreOJ 2163. 「POI2011 R2 Day2」旋转树木 Tree Rotations 上时限开了 \(160ms\) ,加个快读就行了。

    点击查看代码
    const ll Maxn=3e5+10,Maxnlogn=Maxn*log2(Maxn);
    ll rt_sum=0,ans=0,sum1=0,sum2=0;
    struct SegmentTree
    {
        ll ls,rs,sum;
    }tree[Maxnlogn];
    #define lson(rt) (tree[rt].ls)
    #define rson(rt) (tree[rt].rs)
    void pushup(ll rt)
    {
        tree[rt].sum=tree[lson(rt)].sum+tree[rson(rt)].sum;
    }
    ll build()
    {
        rt_sum++;
        lson(rt_sum)=rson(rt_sum)=tree[rt_sum].sum=0;
        return rt_sum;
    }
    void update(ll rt,ll l,ll r,ll pos,ll val)
    {
        if(l==r)
        {
            tree[rt].sum+=val;
            return;
        }
        ll mid=(l+r)/2;
        if(pos<=mid)
        {
            lson(rt)=(lson(rt)==0)?build():lson(rt);
            update(lson(rt),l,mid,pos,val);
        }
        else
        {
            rson(rt)=(rson(rt)==0)?build():rson(rt);
            update(rson(rt),mid+1,r,pos,val);
        }
        pushup(rt);
    }
    ll merge(ll rt1,ll rt2,ll l,ll r)
    {
        if(rt1==0)//如果有节点为空返回另一个节点
        {
            return rt2;
        }
        if(rt2==0)
        {
            return rt1;
        }
        if(l==r)//找到叶子节点合并并返回
        {
            tree[rt1].sum+=tree[rt2].sum;
            return rt1;
        }
        sum1+=tree[rson(rt1)].sum*tree[lson(rt2)].sum;
        sum2+=tree[lson(rt1)].sum*tree[rson(rt2)].sum;
        ll mid=(l+r)/2;
        lson(rt1)=merge(lson(rt1),lson(rt2),l,mid);
        rson(rt1)=merge(rson(rt1),rson(rt2),mid+1,r);
        pushup(rt1);
        return rt1;
    }
    ll dfs(ll n)
    {
        ll root,ls,rs,x;
        x=read();
        if(x==0)
        {
            ls=dfs(n);
            rs=dfs(n);
            sum1=sum2=0;
            root=merge(ls,rs,1,n);//合并
            ans+=min(sum1,sum2);
        }
        else
        {
            root=build();
            update(root,1,n,x,1);
        }
        return root;
    }
    int main()
    {
        ll n;
        n=read();
        dfs(n);
        write(ans);
        return 0;
    }
    

luogu P3605 [USACO17JAN] Promotion Counting P

luogu P4556 [Vani有约会] 雨天的尾巴 /【模板】线段树合并

BZOJ4636 蒟蒻的数列

UVA1220 Party at Hali-Bula

luogu P3224 [HNOI2012] 永无乡

BZOJ4399 魔法少女LJJ

BZOJ4919 大根堆

luogu P4577 [FJOI2018] 领导集团问题

luogu P4219 [BJOI2014] 大融合

luogu P2605 [ZJOI2010] 基站选址

luogu P5298 [PKUWC2018] Minimax

标签:rt,线段,luogu,sum,tree,日记,上旬,五月,ll
From: https://www.cnblogs.com/The-Shadow-Dragon/p/18169047

相关文章

  • 投资日记_2
    一直以来,我都想建立自己的量化模型,开设自己的金融分析网站。如今,网站已经有了雏形,但是算法还没到位。2021年,我曾经短暂地将它部署上线。目前,手头持有的投资项目有:A股、基金、理财、数字货币、合约和定期存款。基金、合约盈利为负,其他为正。手头持有方正科技、伊利股份和永泰能......
  • IOS CI踩坑日记
    ZACMSProject.xcodeproj:error:Invalidtrustsettings.Restoresystemdefaulttrustsettingsforcertificate"iPhoneDeveloper:xxxxx(xxxxxxxxxx)"inordertosigncodewithit.(intarget'xxxxxx'fromproject'xxxxxxxx')......
  • 2024日记
    4.24:打由乃打扑克然后……我招谁惹谁了啊!加个代码,求神帮调#include<bits/stdc++.h>usingnamespacestd;#defineinfile(x)freopen(x,"r",stdin)#defineoutfile(x)freopen(x,"w",stdout)#defineerrfile(x)freopen(x,"w",stderr)usingll=longlo......
  • 主题捣鼓日记
    主题捣鼓日记sakura版本(YYDS)主要框架都没怎么动,功能挺完整的。但是如果要DIY还是得自己把代码捋一遍,不然从哪改起都不知道,注释不能说完全没用。。。捣鼓了两天两夜,还是有很多细节没改好,main.js翻了四五遍,看评论区发现诸多细节还要改CSS文件,太难了。。前端都忘得差不多了,赶紧借......
  • 九下四月下旬日记
    4.21闲话做题纪要4.22闲话做题纪要luoguP1494[国家集训队]小Z的袜子设\([l,r]\)内每个数出现的次数为\(cnt_{i}\),有\(\begin{aligned}\frac{\sum\limits_{i=1}^{\max\limits_{j=1}^{n}\{c_{j}\}}\binom{cnt_{i}}{2}}{\binom{r-l+1}{2}}\end{aligned}\)......
  • 日记
    2024/4/21#include<stdio.h>voidf(doublea,doubleb,doublec,double*max){  *max=a;  intarr[3]={a,b,c};  for(inti=0;i<3;i++){    if(*max<arr[i])*max=arr[i];  }}intmain(){  doublea=0.0,b=0.0,c=0.0;  doublemax_1=0......
  • 日记
    2024.4.19#include<stdio.h>voiddot(intarr[6][6],int*num,int*row,int*col){ intc=0; intc_1=0; for(inti=1;i<=5;i++){ for(intj=1;j<=5;j++){ for(intp=1;p<=5;p++){ if(arr[i][j]<=arr[p][j]){ c++; } } if(c==5)......
  • 组会日记
    2024-4-18日记大的方向:看完一篇论文!!1.puncturedcode:为什么每一个locallity都要捎带着提一下puncturedcode呢?每一个码都一定有locality属性,但是可能很差,我们需要一个衡量的标准,那么怎么来定义这个标准呢,就是通过punctured来定义,因为punctured是截断的,我们可以通过截断,来判断该......
  • 打造心灵栖息地:YY日记App——原型设计分享
    YY日记App是一个专为年轻人打造的心灵日记应用,旨在提供一个私密、个性化的日记记录平台。在本篇博客中,我将分享我对YY日记App的原型设计思路和实现过程。一、用户研究  在设计YY日记App的原型之前,我进行了深入的用户研究,明确了目标用户群体为年轻人,他们希望有一个简洁易用、......
  • 团队开发日记第二篇
    今天进行了站立会议,主要讨论了整个项目的工作分配和关键技术点......