求助线段树,如何判断区间覆盖和区间加的先后
  • 板块灌水区
  • 楼主fangzichang
  • 当前回复16
  • 已保存回复16
  • 发布时间2022/5/16 10:54
  • 上次更新2023/10/28 01:19:27
查看原帖
求助线段树,如何判断区间覆盖和区间加的先后
678087
fangzichang楼主2022/5/16 10:54

传送门

初学线段树,为了这个题思考了半个上午,没有任何结果,,,,老师禁止看题解因此来这里求救

目前的想法是存两个lazy,然后下放的时候分别判断

void tagdown(int x){
	if(a[x].lazy1){
		a[x*2].sum+=a[x].lazy1*(a[x*2].r-a[x*2].l+1);
		a[x*2+1].sum+=a[x].lazy1*(a[x*2+1].r-a[x*2+1].l+1);
		a[x*2].lazy1+=a[x].lazy1;
		a[x*2+1].lazy1+=a[x].lazy1;
		a[x].lazy1=0;
	}
	if(a[x].lazy2!=INF){
		a[x*2].lazy2=a[x*2+1].lazy2=a[x].lazy2;
		a[x*2].sum=(a[x*2].r-a[x*2].l+1)*a[x].lazy2;
		a[x*2+1].sum=(a[x*2+1].r-a[x*2+1].l+1)*a[x].lazy2;
		a[x*2].lazy1=a[x*2+1].lazy1=0;
		a[x].lazy2=INF;
	}
}

但是显然不行,,,先加再覆盖和先覆盖再加无法判断

一个新想法是lazy改成一个vector,下放的时候从后向前跳到最后一个覆盖操作,同时路上记录加的总和,但是感觉显然会超时

2022/5/16 10:54
加载中...