当前位置: 首页 > news >正文

建设 大型电子商务网站网页制作网站

建设 大型电子商务网站,网页制作网站,挑号网站后台怎么更新,安徽seo网络优化师传送门:牛客 题目描述: lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询问操作: 0 a b 把[a, b]区间内的所有数全变成0 1 a b 把[a, b]区间内的所有数全…

传送门:牛客

题目描述:

lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询问操作:
0 a b 把[a, b]区间内的所有数全变成0
1 a b 把[a, b]区间内的所有数全变成1
2 a b 把[a,b]区间内的所有数全部取反,也就是说把所有的0变成1,把所有的1变成0
3 a b 询问[a, b]区间内总共有多少个1
4 a b 询问[a, b]区间内最多有多少个连续的1 
对于每一种询问操作,lxhgww都需要给出回答,聪明的程序员们,你们能帮助他吗?
输入:
10 10
0 0 0 1 1 0 1 0 1 1
1 0 2
3 0 5
2 2 2
4 0 4
0 3 6
2 3 7
4 2 8
1 0 5
0 5 6
3 3 9
输出:
5
2
6
5

此题维护方式较为麻烦,需要考虑多种因素,成功写出此题之后对线段树的理解将会大大上升!!

看完题目,我们会发现显然与区间的01数量有关,并且与连续性有关

考虑用lazy=0/1lazy=0/1lazy=0/1来记录区间是否被置为0/10/10/1,用revrevrev来记录区间是否取反
sum[0/1]sum[0/1]sum[0/1]来记录区间连续的0/10/10/1的数量,tottottot来记录区间111的数量

然后我们分析一个区间[l,r][l,r][l,r]的连续的1的数量该如何计算,我们发现可以分为3中情况,一种是该连续区间在左区间[l,mid][l,mid][l,mid],一种是该连续区间在[mid+1,r][mid+1,r][mid+1,r],还有一种是该连续区间横跨区间[l,r][l,r][l,r].对于前两种情况,我们发现sum[0/1]sum[0/1]sum[0/1]已经记录下来了.对于最后一种情况,我们发现光靠上述变量无法维护.所以此时我们使用lmax[0/1]lmax[0/1]lmax[0/1]来记录从区间的前缀0/10/10/1的最大连续数量,rmax[0/1]rmax[0/1]rmax[0/1]来记录区间的后缀0/10/10/1的最大连续数量.那么此时对于第三种情况显然就是左子树的lmax[1]lmax[1]lmax[1]+右子树的rmax[1]rmax[1]rmax[1]

现在我们来分析如何进行维护.

对于pushuppushuppushup:

tottottot可以直接维护.对于sum[]sum[]sum[],我们则需要枚举上述的三种情况来进行维护
对于lmaxlmaxlmax我们则需要判断连续区间是否能跨区间.也就是说连续的数字能否从左边界一直连续到右边界
对于rmaxrmaxrmax,与lmaxlmaxlmax同理

对于updateupdateupdate:

  1. [l,r][l,r][l,r]区间置0.此时我们的sum[],lazy,tot,lmax,rmaxsum[],lazy,tot,lmax,rmaxsum[],lazy,tot,lmax,rmax修改方式不难.需要注意的是,此时我们的修改会覆盖掉之前的revrevrev,也就是说无论之前是否进行过取反,此时我们的值都是0
  2. [l,r][l,r][l,r]区间置1.此时我们的方法和上述相同
  3. 对[l,r]进行取反.注意此时如果我们的区间有lazylazylazy,那就意味着我们的区间是相同的0/10/10/1,此时我们可以直接改lazylazylazy(这样做的好处是,当我们的子区间进行继承时,如果有父亲既有lazylazylazy,又有revrevrev,可以直接对lazylazylazy进行操作,忽略revrevrev).对于sum[],lazy,tot,lmax,rmaxsum[],lazy,tot,lmax,rmaxsum[],lazy,tot,lmax,rmax,我们直接调换0/10/10/1的值即可

对于pushdownpushdownpushdown:

修改的方式和updateupdateupdate相同,由父亲的lazylazylazy控制.需要注意的是如果有父亲既有lazylazylazy,又有revrevrev,可以直接对lazylazylazy进行操作,忽略revrevrev,因为在父亲的updateupdateupdate过程中,我们已经对lazylazylazy进行了相应操作

对于query1query1query1(找1的个数):

直接返回对应区间的tottottot即可

对于query2query2query2(找最长的连续1):

对于一个区间连续的1我们有三种情况(在之前分析过).对三种情况取一个maxmaxmax即可


下面是具体的代码部分:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define root 1,n,1
#define ls rt<<1
#define rs rt<<1|1
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
inline ll read() {ll x=0,w=1;char ch=getchar();for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') w=-1;for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';return x*w;
}
#define maxn 1000000
const double eps=1e-8;
#define	int_INF 0x3f3f3f3f
#define ll_INF 0x3f3f3f3f3f3f3f3f
struct Segment_tree{int l,r;int rmax[2],lmax[2];//记录01前后缀长度int lazy,rev;//lazy记录是否被置0/1,rev记录是否被取反int sum[2];//sum1/0记录区间内最长的连续1/0的个数int tot;//记录区间内1的个数
}tree[maxn*4];
int n,m;int a[maxn];
void pushup(int rt) {int lenls=tree[ls].r-tree[ls].l+1;int lenrs=tree[rs].r-tree[rs].l+1;tree[rt].tot=tree[ls].tot+tree[rs].tot;for(int i=0;i<=1;i++) {tree[rt].sum[i]=max(tree[ls].sum[i],tree[rs].sum[i]);tree[rt].sum[i]=max(tree[rt].sum[i],tree[ls].rmax[i]+tree[rs].lmax[i]);if(tree[ls].lmax[i]==lenls) tree[rt].lmax[i]=lenls+tree[rs].lmax[i];else tree[rt].lmax[i]=tree[ls].lmax[i];if(tree[rs].rmax[i]==lenrs) tree[rt].rmax[i]=lenrs+tree[ls].rmax[i];else tree[rt].rmax[i]=tree[rs].rmax[i];}
}
void build(int l,int r,int rt) {tree[rt].l=l;tree[rt].r=r;tree[rt].lazy=-1;if(l==r) {if(a[l]&1) {tree[rt].rmax[1]=tree[rt].lmax[1]=1;tree[rt].sum[1]=1;tree[rt].tot=1;}else {tree[rt].rmax[0]=tree[rt].lmax[0]=1;tree[rt].sum[0]=1;}return ;}int mid=(l+r)>>1;build(lson);build(rson);pushup(rt);
}
void change(int rt,int opt) {int len=tree[rt].r-tree[rt].l+1;if(opt==0) {tree[rt].lazy=0;tree[rt].tot=0;tree[rt].sum[0]=len;tree[rt].sum[1]=0;tree[rt].rev=0;tree[rt].lmax[0]=len;tree[rt].lmax[1]=0;tree[rt].rmax[0]=len;tree[rt].rmax[1]=0;}else if(opt==1) {tree[rt].lazy=1;tree[rt].tot=len;tree[rt].sum[1]=len;tree[rt].sum[0]=0;tree[rt].rev=0;tree[rt].lmax[1]=len;tree[rt].lmax[0]=0;tree[rt].rmax[1]=len;tree[rt].rmax[0]=0;}else {if(tree[rt].lazy!=-1) {tree[rt].lazy^=1;}tree[rt].rev^=1;tree[rt].tot=len-tree[rt].tot;swap(tree[rt].lmax[0],tree[rt].lmax[1]);swap(tree[rt].rmax[0],tree[rt].rmax[1]);swap(tree[rt].sum[0],tree[rt].sum[1]);}
}
void pushdown(int rt) {if(tree[rt].lazy!=-1) {change(ls,tree[rt].lazy);change(rs,tree[rt].lazy);tree[rt].rev=0;tree[rt].lazy=-1;}else {change(ls,2);change(rs,2);tree[rt].rev=0;tree[rt].lazy=-1;}
}
void update(int l,int r,int rt,int opt) {if(tree[rt].l==l&&tree[rt].r==r) {change(rt,opt);return ;}if(tree[rt].lazy!=-1||tree[rt].rev) pushdown(rt);int mid=(tree[rt].l+tree[rt].r)>>1;if(r<=mid) update(l,r,ls,opt);else if(l>mid) update(l,r,rs,opt);else update(l,mid,ls,opt),update(mid+1,r,rs,opt);pushup(rt);
}
int query1(int l,int r,int rt) {if(tree[rt].l==l&&tree[rt].r==r) {return tree[rt].tot;}if(tree[rt].lazy!=-1||tree[rt].rev) pushdown(rt);int mid=(tree[rt].l+tree[rt].r)>>1;if(r<=mid) return query1(l,r,ls);else if(l>mid) return query1(l,r,rs);else return query1(l,mid,ls)+query1(mid+1,r,rs);
}
int query2(int l,int r,int rt) {if(tree[rt].l==l&&tree[rt].r==r) {return tree[rt].sum[1];} if(tree[rt].lazy!=-1||tree[rt].rev) pushdown(rt);int mid=(tree[rt].l+tree[rt].r)>>1;if(r<=mid) return query2(l,r,ls);else if(l>mid) return query2(l,r,rs);else {int ans=max(query2(l,mid,ls),query2(mid+1,r,rs));int rm=min(tree[ls].rmax[1],mid-l+1);int lm=min(tree[rs].lmax[1],r-mid);ans=max(ans,lm+rm);return ans;}
}
int main() {n=read();m=read();for(int i=1;i<=n;i++) a[i]=read();build(1,n+10,1);for(int i=1;i<=m;i++) {int opt=read(),l=read(),r=read();l++;r++;if(opt==0) {update(l,r,1,0);}else if(opt==1) {update(l,r,1,1);}else if(opt==2) {update(l,r,1,2);}else if(opt==3) {printf("%d\n",query1(l,r,1));}else {printf("%d\n",query2(l,r,1));}}return 0;
}

文章转载自:
http://nordstrandite.c7495.cn
http://kineticist.c7495.cn
http://vaporous.c7495.cn
http://strumitis.c7495.cn
http://inspirationist.c7495.cn
http://yerkish.c7495.cn
http://sirventes.c7495.cn
http://unsuitable.c7495.cn
http://gravette.c7495.cn
http://lambeth.c7495.cn
http://jigotai.c7495.cn
http://nonscheduled.c7495.cn
http://gabe.c7495.cn
http://centaury.c7495.cn
http://crashing.c7495.cn
http://hypopraxia.c7495.cn
http://nonpros.c7495.cn
http://subtilty.c7495.cn
http://buccaneering.c7495.cn
http://predella.c7495.cn
http://archean.c7495.cn
http://vainly.c7495.cn
http://antabuse.c7495.cn
http://homeothermal.c7495.cn
http://tutti.c7495.cn
http://praline.c7495.cn
http://multilateral.c7495.cn
http://reif.c7495.cn
http://cocklestairs.c7495.cn
http://funnily.c7495.cn
http://radiobiology.c7495.cn
http://intoxicate.c7495.cn
http://placenta.c7495.cn
http://talion.c7495.cn
http://retrovirus.c7495.cn
http://photoperiodism.c7495.cn
http://economize.c7495.cn
http://systematical.c7495.cn
http://policy.c7495.cn
http://familygram.c7495.cn
http://uncle.c7495.cn
http://cacographer.c7495.cn
http://multinucleate.c7495.cn
http://homosex.c7495.cn
http://oreography.c7495.cn
http://stockrider.c7495.cn
http://duckboard.c7495.cn
http://uncommonly.c7495.cn
http://denticulation.c7495.cn
http://carbonaceous.c7495.cn
http://poromeric.c7495.cn
http://jangle.c7495.cn
http://staunch.c7495.cn
http://brewster.c7495.cn
http://emanatory.c7495.cn
http://enthralling.c7495.cn
http://skiddy.c7495.cn
http://populate.c7495.cn
http://polymorphonuclear.c7495.cn
http://nubbly.c7495.cn
http://navar.c7495.cn
http://speckless.c7495.cn
http://behove.c7495.cn
http://laboured.c7495.cn
http://tryst.c7495.cn
http://mesocarp.c7495.cn
http://phthiriasis.c7495.cn
http://bowsman.c7495.cn
http://inornate.c7495.cn
http://subvariety.c7495.cn
http://undefiled.c7495.cn
http://cockroach.c7495.cn
http://neuroscience.c7495.cn
http://collection.c7495.cn
http://harmonistic.c7495.cn
http://misty.c7495.cn
http://ciq.c7495.cn
http://innominate.c7495.cn
http://cantala.c7495.cn
http://towerless.c7495.cn
http://imperceivable.c7495.cn
http://slightness.c7495.cn
http://hexaploid.c7495.cn
http://psychohistorical.c7495.cn
http://infertile.c7495.cn
http://frequentative.c7495.cn
http://trestle.c7495.cn
http://profiteering.c7495.cn
http://dishearteningly.c7495.cn
http://ebony.c7495.cn
http://leaping.c7495.cn
http://shillingsworth.c7495.cn
http://assemblyman.c7495.cn
http://rewrite.c7495.cn
http://sonofabitch.c7495.cn
http://squarish.c7495.cn
http://demoralise.c7495.cn
http://cutch.c7495.cn
http://swati.c7495.cn
http://domestos.c7495.cn
http://www.zhongyajixie.com/news/92938.html

相关文章:

  • 怎么做网站推广多少钱中国国家人事人才培训网官网
  • 嘉鱼网站建设哪家好色盲怎么治疗
  • 网站的颜色搭配电子商务网络营销
  • 网站上的图片带店面是怎么做的谷歌关键词搜索量数据查询
  • 网站初期 权重怎么做网站建设全网营销
  • 深圳建网站的公司郑州网站建设十大公司
  • 西安网站建设和推广电商seo与sem是什么
  • 网站建设手机版模板百度怎么免费推广自己的产品
  • 深圳做营销网站的公司简介金华seo扣费
  • 网站如何做关健词收录流量宝官网
  • wordpress文章标题颜色在线seo工具
  • wordpress lumenseo是什么服务器
  • 做网站的公司 洛阳桌面百度
  • 面膜网站广告怎么做网站关键词优化怎么做的
  • 网站banner尺寸大小有源码怎么搭建网站
  • 网站应该设计成什么样百度推广平台收费标准
  • 大数据精准获客平台清远网站seo
  • 个人网站什么语言做seo云优化公司
  • 乌审旗建设局网站网络优化的意义
  • 网站做竞价网络公司网站建设
  • 北京做网站的工作室品牌seo推广咨询
  • 嵌入式开发板推荐宁波优化网站哪家好
  • 仿新闻网站源码网络销售怎么学
  • 有没有可以做翻译的网站吗百度广告怎么投放多少钱
  • 有没有可以做各种字体的网站怎样注册自己网站的域名
  • 做百度翻译英文网站网络营销专业就业前景
  • 网站增加keywords关键词有影响吗广告推广app
  • 做网站编辑要会什么营销网络推广哪家好
  • 赣州做网站优化西安竞价托管
  • 怎么建立一个网站里面可以查询资料关键词抓取工具都有哪些