2022湖北省赛 L 裸线段树
创始人
2025-05-30 10:50:13
0

有人不会裸线段树

有人没有pushdown调了两小时裸线段树

早该414了

L (codeforces.com)

题意:

给定一段数,操作有区间加和单点锁定某一值,如果某一位置被锁定,那么区间加不包含这个位置,询问为区间和。

思路:

对于修改查询的DS题,有个普遍的思路是:

先去确定一些询问需要维护的东西

然后再去看修改操作对询问要维护的东西的贡献

对于这道题,有四种操作:

询问只有一种,询问区间和

然后去看修改:每次修改都是把所有s=1的值区间加x

那么这种操作对区间和的贡献就是这个区间的s=1的个数*x

因此可以得出我们还需要维护区间s=1的个数

然后再去想,修改操作对区间cnt的影响

只有1和2操作会对cnt有影响

然后就可以开始写了,我们只需维护区间和和区间s=1的cnt就行了

然后就是pushdown操作

在pushdown操作的时候,往左区间和右区间分别加上对应比例的贡献

Code:

#include 
using namespace std;
#define int long long
using i64 = long long;
const int mxn=1e6+10;
const int mxe=1e6+10;
struct ty{int sum,cnt,lazy;
}tree[mxe<<2];
int n,Q,op,x,l,r;
int a[mxn],s[mxn];
void pushup(int rt){tree[rt].sum=tree[rt<<1].sum+tree[rt<<1|1].sum;tree[rt].cnt=tree[rt<<1].cnt+tree[rt<<1|1].cnt;
}
void pushdown(int rt){tree[rt<<1].lazy+=tree[rt].lazy;tree[rt<<1|1].lazy+=tree[rt].lazy;tree[rt<<1].sum+=tree[rt<<1].cnt*tree[rt].lazy;tree[rt<<1|1].sum+=tree[rt<<1|1].cnt*tree[rt].lazy;tree[rt].lazy=0;
}
void build(int rt,int l,int r){tree[rt].cnt=r-l+1;if(l==r){tree[rt].sum=a[l];tree[rt].cnt=s[l];return;}int mid=l+r>>1;build(rt<<1,l,mid);build(rt<<1|1,mid+1,r);pushup(rt);
}
void modify1(int rt,int l,int r,int x){if(s[x]) tree[rt].cnt++;else tree[rt].cnt--;if(l==r){return;}pushdown(rt);int mid=l+r>>1;if(x<=mid) modify1(rt<<1,l,mid,x);else modify1(rt<<1|1,mid+1,r,x);pushup(rt);
}
int query1(int rt,int l,int r,int x,int y){if(x<=l&&r<=y){return tree[rt].cnt;}int mid=l+r>>1;int res=0;if(x<=mid) res+=query1(rt<<1,l,mid,x,y);if(y>mid) res+=query1(rt<<1|1,mid+1,r,x,y);return res;
}
void modify2(int rt,int l,int r,int x,int y,int t){if(x<=l&&r<=y){tree[rt].lazy+=t;tree[rt].sum+=tree[rt].cnt*t;return;}if(tree[rt].lazy!=0) pushdown(rt);int mid=l+r>>1;if(x<=mid) modify2(rt<<1,l,mid,x,y,t);if(y>mid) modify2(rt<<1|1,mid+1,r,x,y,t);pushup(rt);
}
int query2(int rt,int l,int r,int x,int y){if(x<=l&&r<=y){return tree[rt].sum;}if(tree[rt].lazy!=0) pushdown(rt);int mid=l+r>>1;int res=0;if(x<=mid) res+=query2(rt<<1,l,mid,x,y);if(y>mid) res+=query2(rt<<1|1,mid+1,r,x,y);return res;
}
void solve(){cin>>n>>Q;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++) cin>>s[i];build(1,1,n);while(Q--){cin>>op;if(op==1){cin>>x;s[x]^=1;modify1(1,1,n,x);}else if(op==2){cin>>x;s[x]^=1;modify1(1,1,n,x);}else if(op==3){cin>>l>>r>>x;modify2(1,1,n,l,r,x);}else{cin>>l>>r;cout<>__;while(__--)solve();return 0;
}

相关内容

热门资讯

9、Cascaded Diff... 简介 主页:https://cascaded-diffusion.github.io/...
央视首推情感教育纪录片《镜子》... (4月19日)晚,央视纪录片《镜子》首播,给了中国家庭教育当头一棒。  之所以取名“镜子”,是因为“...
朱泾二小:满足孩子与家长的幸福... 教育工作要以孩子和家长“幸福”为追求,满足了学生个性化发展的需求,满足了家长自我提高的需求,家校共同...
争做模范好家长 共育家教新篇章... 为发现和宣传在家庭教育方面有创新有实效的好家长,以及关心教育,支持学校、班级工作的“好家长”先进典型...
比起富养孩子,培养孩子的抗挫商... 1去年十一月,安徽电视台记者段丹峰为情跳楼自杀。自杀前曾连发五小时微博,可见那段时间内她内心遭受多么...
蒙山中学:爆棚的“创城力” 蒙... 家校携手共创城4月27日上午,“我为创城 文明家校”金山区中学家校工作座谈会在蒙山中学举行,来自全区...
Notion汉化 市面上笔记软件五花八门,都各有特色。wolai、语雀、飞书、印象笔记、石墨、幕布、为知...
最新或2023(历届)5月20... 我们用全部的爱关爱家人,我们期待孩子健康快乐的长大,我们竭尽所有把最好的给孩子!每一个小天使的降临,...
最新或2023(历届).5.9... 亲爱的家人朋友们:欢迎您来到美丽的杭州,参加最新或2023(历届)5月9日—5月11日(周二至周四)...
孩子写作业总是拖拖拉拉?家庭教... 成就孩子美好人生!上城区学生成长支持中心第三讲“督促孩子完成作业的窍门 ”,欢迎家长朋友通过微信报名...
反腐正剧《人民的名义》,是一部... 《人民的名义》自最新或2023(历届)3月28日开播以来,已接近一个月,热度不减,而据CSM52城市...
Spring Boot 自定义... 概述 因为最近一直在为公司搭建底层框架, 好久没有更新博客了,本次搭建的框架结构...
想提升宝宝情商,家庭教育很关键... 爸爸妈妈们,你们是否有过对于如何培养宝宝情商的问题的犯难?可能我们可以给宝宝上最好的学校,或者根据宝...
Redis(九):并发问题 前言 上一篇介绍了 Redis 的内存管理。这节开始介绍 Redis 并发方面的问题。 Redis ...
python多线程 文章目录一、简介1.1 多线程的特性1.2 GIL二、线程1.2 单线程1.3 多线程三、线程池3....
綦江区成为家校共育区域性研究实... 4月26日—27日,中国教育学会“十三五”教育科研重点课题“基础教育阶段家校共育的理论与实践研究”现...
曲阜《教子有方》&lt... 一个孩子的教育成功,是全家人的成功!一个孩子的教育失败,是全家人的失败!——————赵国彦任何事业的...
《家庭教育》杂志创刊三十年贺词... 中国家庭教育学会副会长、北京师范大学教授赵忠心(杭州《家庭教育》杂志最新或2023(历届)第一二期)...
美国男人为什么不包二奶? 外国... 1、信仰美国的社会,大部分人们对宗教很虔诚。而对于教徒对婚姻、家庭的忠诚,宗教有很明确的要求,有些宗...
DirectX12(D3D12... 目录1、前言1.1、一些感慨1.2、运行效果展示1.3、示例简介1.4、示例操作说明1.5、本章内容...