首页 > 其他分享 >9.23 D 暂存

9.23 D 暂存

时间:2024-09-23 20:50:23浏览次数:9  
标签:9.23 rt rs zgs ls lji 暂存 rji

鉴于 5k 和 int_R 等大神都认为这道题 80pts 档是一个普通的线段树,作为一个线段树狂热爱好者果断尝试,但在打出 30 行的 pushup 后蚌埠住了,但还是想切掉,所以暂存一下,什么时候打出来什么时候删置顶。

目前进度:pushup,建树

你们要是能发现问题记得说啊,


#include<bits/stdc++.h>
#define fo(x,y,z) for(register int (x)=(y);(x)<=(z);(x)++)
#define fu(x,y,z) for(register int (x)=(y);(x)>=(z);(x)--)
using namespace std;
typedef long long ll;
#define lx ll
inline lx qr()
{
	char ch=getchar();lx x=0,f=1;
	for(;ch<'0'||ch>'9';ch=getchar()) if(ch=='-') f=-1;
	for(;ch>='0'&&ch<='9';ch=getchar()) x=(x<<3)+(x<<1)+(ch^48);
	return x*f;
}
#undef lx
#define qr qr()
#define pii pair<int,int>
#define fi first
#define se second
const int Ratio=0;
const int N=1e5+5;
const int mod=998244353;
int n,m;
int a[N];
// segment tree
int llen[N<<2]/*左连续正长度*/,rlen[N<<2],zgs[N<<2]/*正连续段个数*/;
unsigned lji[N<<2],rji[N<<2],lv1[N<<2],rv1[N<<2],v1[N<<2],v2[N<<2],v3[N<<2],v4[N<<2];
bool man[N<<2];// 整段为正
namespace Wisadel
{
    #define ls (rt<<1)
    #define rs (rt<<1|1)
    #define mid ((l+r)>>1)
    void Wpushup(int rt)
    {
        if(man[ls]&&man[rs]) llen[rt]=rlen[rt]=llen[ls]+rlen[rs],
                             lji[rt]=rji[rt]=lji[ls]*rji[rs],man[rt]=1;
        else if(!man[ls]&&man[rs]) llen[rt]=llen[ls],lji[rt]=lji[ls],
                                   rlen[rt]=rlen[rs]+rlen[ls],rji[rt]=rji[rs]*rji[ls],man[rt]=0;
        else if(man[ls]&&!man[rs]) rlen[rt]=rlen[rs],rji[rt]=rji[rs],
                                   llen[rt]=llen[ls]+llen[rs],lji[rt]=lji[ls]*lji[rs],man[rt]=0;
        else llen[rt]=llen[ls],rlen[rt]=rlen[rs],lji[rt]=lji[ls],rji[rt]=rji[rs],man[rt]=0;
        if(rlen[ls]&&llen[rs]) zgs[rt]=zgs[ls]+zgs[rs]-1;
        else zgs[rt]=zgs[ls]+zgs[rs];
        lv1[rt]=llen[rt]*lji[rt],rv1[rt]=rlen[rt]*rji[rt];
        if(!llen[rs]||!rlen[ls])
        {// 没有合并块
            v1[rt]=v1[ls]+v1[rs];
            v2[rt]=v2[ls]+v2[rs]+v1[rs]*zgs[ls];
            v3[rt]=v3[ls]+v3[rs]+v1[ls]*zgs[rs];
            v4[rt]=v4[ls]+v4[rs]+zgs[rs]*v2[ls]+zgs[ls]*v3[rs];
        }
        else
        {
            v1[rt]=v1[ls]+v1[rs]-rv1[ls]-lv1[rs]+rji[ls]*lji[rs]*(rlen[ls]+llen[rs]);
            v2[rt]=v2[ls]+v2[rs]-rji[ls]*zgs[ls]-lji[rs]+rji[ls]*lji[rs]*(rlen[ls]+llen[rs])*zgs[ls]+(v1[rs]-lji[rs])*(zgs[ls]-1);
            v3[rt]=v3[ls]+v3[rs]-rji[ls]-lji[rs]*zgs[rs]+rji[ls]*lji[rs]*(rlen[ls]+llen[rs])*zgs[rs]+(v1[ls]-rji[ls])*(zgs[rs]-1);
            v4[rt]=v4[ls]+v4[rs]-rji[ls]*zgs[ls]-lji[rs]*zgs[rs]+zgs[rs]*(v2[ls]-rji[ls]*zgs[ls])+zgs[ls]*(v3[rs]-lji[rs]*zgs[rs])+rji[ls]*lji[rs]*(rlen[ls]+llen[rs])*(zgs[ls]-1)*(zgs[rs]-1);
        }
    }
    void Wbuild(int rt,int l,int r)
    {
        if(l==r)
        {
            man[rt]=1;
            llen[rt]=rlen[rt]=zgs[rt]=1;
            lji[rt]=rji[rt]=a[l];
            lv1[rt]=rv1[rt]=v1[rt]=v2[rt]=v3[rt]=v4[rt]=a[l];
            return;
        }
        Wbuild(ls,l,mid),Wbuild(rs,mid+1,r);
        Wpushup(rt);
    }
    short main()
    {
        freopen(".in","r",stdin),freopen(".out","w",stdout);
        // freopen("a.in","r",stdin),freopen("a.out","w",stdout);
        n=qr,m=qr;
        fo(i,1,n) a[i]=qr;
        Wbuild(1,1,n);
        return Ratio;
    }
}
int main(){return Wisadel::main();}

没完结不撒花

标签:9.23,rt,rs,zgs,ls,lji,暂存,rji
From: https://www.cnblogs.com/Ratio-Yinyue1007/p/18427860

相关文章

  • 云原生周刊:Artifact Hub 成为 CNCF 孵化项目|2024.9.23
    开源项目推荐CorootCoroot是一个开源监控工具,旨在为云原生应用提供可观察性。它通过整合指标、日志和追踪信息,专注于提供应用性能的洞察。DirectPVDirectPV是一个开源项目,旨在为Kubernetes工作负载提供高效的直接卷访问。它通过允许应用绕过容器运行时,直接访问持久卷,从而......
  • 9.23 海报+PDF水印运用
    任务2:海报以宣传校植物研学社为主题,吸引天华小学学生积极报名加入校植物研学社,与学校聘请特邀的植物学专家、生物老师、同学共度一场植物奇遇记,在植物的世界中展开探索与冒险。在每周一次的研学社活动中,教师会提供各种各样的植物标本与实物,学生可以在专家、教师的帮助、引导下了......
  • 9.23人工
    可画海报主题:植物研学社任务2:通过本节课的学习,我们使用可画制作了一个应用于教育课堂的海报。我们选择了植物研学社的招新作为主题,在该海报中,我们加入了各种植物类型的图片,并且通过文本框对植物研学社进行了一定的介绍,包括标语、名称、logo、水印等。另外,还通过“草料二维码”......
  • Git 工作区、暂存区和版本库
    基本概念我们先来理解下Git工作区、暂存区和版本库概念:工作区:就是你在电脑里能看到的目录。暂存区:英文叫stage或index。一般存放在 .git 目录下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是......
  • 2024.9.23 test
    十三联测#6D一张图,每个点选或不选,问所有情况下,两端点都被选的边的数量的\(k\)次方的和。\(n,m\le10^5,k\le3\)。考虑\(k=3\)的情况,考虑其组合意义,对于所有选点情况,选出\(3\)条可重复的边的方案数。这样就可以拆贡献了,考虑这三条边是什么的情况。a.三条边重复;b.......
  • Git 工作区、暂存区和版本库
    Workspace:工作区。编写代码的区域。Repository:仓库区(或本地仓库)。用来保存commit,一个commit,就是工作区的一个历史版本。Index/Stage:暂存区。用来暂存生成commit所需的信息,可看作临时的commit,gitadd将工作区的指定内容加入暂存区,gitcommit依照暂存区信息生成commit,并......
  • 159.235 2023 S02 Wireframe Data Viewer
    159.2352023S02—Assignment2Thisassignmentcoversthetopics:coordinates,transformations,3dmodelling,andvisiblesurfaces.WireframeDataViewerWriteaJavaprogramthatrendersa3dimensionaltrianglewireframesurfacedatamodelandallowso......
  • Mac版Sourcetree暂存代码和取出代码
    实际开发中经常遇到开发一半,要拉代码或者切分支的情况,这时候开发一半的代码如果不提交或者删除重置是无法拉取和切换分支的,那么这个时候可以把这部分代码暂存起来,然后在想取出的时候取出就行了1.点击暂存文件,如下图2.点击贮藏,然后输入一个标识3.此时就可以正常拉取代码和切换......
  • vue ant-design上传文件,暂存后在其他页面提交数据(file格式转base64后保存数据,其他页面
    longlongtimenoupdate,huuuuu~最近做一个看起来简单但是功能有点繁琐的东西就是再A页面上传文件,然后B页面确定上传后调用接口,我不知道我这个逻辑对不对哈,有毛病求指教首先用的ant-design框架上传文件<a-uploadlist-type="text":multiple="false":file-list="fileList"......
  • C++ //练习 19.23 为你的Token类添加移动构造函数和移动赋值运算符。
    C++Primer(第5版)练习19.23练习19.23为你的Token类添加移动构造函数和移动赋值运算符。环境:LinuxUbuntu(云服务器)工具:vim 代码块classToken{ public: Token():tok(INT),ival(0){} Token(constToken&t):tok(t.tok){copyUnion(t);} Token&operator=(......