HDU 4391 Paint The Wall 段树(水

HDU 4391 Paint The Wall 段树(水

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

意甲冠军:

特定n多头排列。m操作

以下是各点的颜色

以下m一种操纵:

1 l r col 染色

2 l r col 问间隔col色点

== 通的操作+区间内最大最小颜色数的优化,感觉非常不科学。。。

==感觉能够卡掉这样的写法。。反正就是不科学嘛 

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
#define L(x) tree[x].l
#define R(x) tree[x].r
#define Len(x) tree[x].len
#define Lazy(x) tree[x].lazy
#define M(x) tree[x].minn
#define W(x) tree[x].maxx
#define Lson(x) (x<<1)
#define Rson(x) (x<<1|1)
const int N = 100010;
struct node{
	int l, r, len, lazy, minn, maxx;
}tree[N<<2];
int col[N];
void push_up(int id){
	if(Lazy(Lson(id)) == Lazy(Rson(id)))
		Lazy(id) = Lazy(Lson(id));
	else Lazy(id) = -1;
	M(id) = min(M(Lson(id)), M(Rson(id)));
	W(id) = max(W(Lson(id)), W(Rson(id)));
}
void push_down(int id){
	if(Lazy(id) != -1){
		Lazy(Lson(id)) = Lazy(Rson(id)) = Lazy(id);
		M(Lson(id)) = W(Lson(id)) = Lazy(id);
		M(Rson(id)) = W(Rson(id)) = Lazy(id);
	}
}
void build(int l, int r, int id){
	L(id) = l; R(id) = r;
	Len(id) = r-l+1;
	Lazy(id) = -1;
	if(l == r){
		Lazy(id) = col[l];
		W(id) = M(id) = col[l];
		return ;
	}
	int mid = (l+r)>>1;
	build(l, mid, Lson(id));
	build(mid+1, r, Rson(id));
	push_up(id);
}
void updata(int l, int r,int val, int id){
	if(l == L(id) && R(id) == r){
		Lazy(id) = val;
		W(id) = M(id) = val;
		return ;
	}
	push_down(id);
	int mid = (L(id) + R(id)) >>1;
	if(mid < l)
		updata(l, r, val, Rson(id));
	else if(r <= mid)
		updata(l, r, val, Lson(id));
	else {
		updata(l, mid, val, Lson(id));
		updata(mid+1, r, val, Rson(id));
	}
	push_up(id);
}
int query(int l, int r, int col, int id){
	if(!(M(id)<=col && col<=W(id))) return 0;
	if(Lazy(id)!=-1){
		if(Lazy(id) == col)
			return r-l+1;
		else return 0;
	}
	push_down(id);
	int mid = (L(id) + R(id)) >>1;
	if(mid < l)
		return query(l, r, col, Rson(id));
	else if(r <= mid)
		return query(l, r, col, Lson(id));
	else
		return query(l, mid, col, Lson(id)) + query(mid+1, r, col, Rson(id));
}
int n, que;

int main() {
	while (cin>>n>>que) {
		for(int i = 1; i <= n; i++)scanf("%d", &col[i]);
		build(1, n, 1);
		while(que--){
			int type, l, r, color;
			scanf("%d %d %d %d", &type, &l, &r, &color);
			l++; r++;
			if(type == 1)
				updata(l, r, color, 1);
			else
				printf("%d\n", query(l, r, color, 1));

		}
	}
	return 0;
}
/*
5 12
1 2 3 4 0
2 1 3 3
1 1 3 1
2 1 3 3
2 0 3 1
2 3 4 1
1 0 4 0
2 0 4 0
2 0 4 2000000000
1 0 0 1
1 4 4 2
2 0 4 1
2 0 4 2

*/

版权声明:本文博客原创文章。博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117563.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【11】进大厂必须掌握的面试题-持续集成面试

    Q1。持续集成是什么意思? 我将建议您通过对持续集成(CI)进行小的定义来开始此答案。这是一种开发实践,要求开发人员每天多次将代码集成到共享存储库中。然后,每个签入均由自动构建进行…

    2020年10月20日
    323
  • win10网页出现stack overflow at line 0的解决方法[通俗易懂]

    win10网页出现stack overflow at line 0的解决方法[通俗易懂]有时候浏览网页的时候会出现stackoverflowatline0的错误提示,弹出如下的对对话框。而且电脑变得很卡很慢,这是因为某些脚本在调试过程中可能会造成死循环或消耗大量内存,一旦可使用的内存被消耗光,就会造成内存溢出,既堆栈溢出。 出现stackoverflowatline0(堆栈的益出)的解决办法。首先在IE浏览器的【工具】【Internet选项】的【高级】…

    2022年7月15日
    19
  • python表白代码-表白python代码

    python表白代码-表白python代码广告关闭2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品。未来,我们一起乘风破浪,创造无限可能。七夕快到了,表白素材赶紧先准备好。。。0、委婉的表白python代码:importstringl=string.ascii_letterss=s.append(l)s.append(l)s.append(l)s.append(l)s.append(l)s.appe…

    2022年6月2日
    34
  • 软件开发的项目详细设计说明书

    软件开发的项目详细设计说明书tip:软件开发设计结构图

    2022年5月20日
    32
  • 【安全系列】IPSEC ××× 配置实例

    【安全系列】IPSEC ××× 配置实例

    2021年7月31日
    54
  • SMTP服务器地址_接收邮件服务器和发送邮件服务器

    SMTP服务器地址_接收邮件服务器和发送邮件服务器网站smtp服务器内容精选换一换如果您需要使用创建的云服务器搭建一个对外展示的网站或者Web应用程序,请按以下步骤进行相关的配置操作。建站参考如果您使用的是公共镜像创建的云服务器,那么购买完成后可以参考以下建站指导完成完网站或应用程序的搭建。搭建WordPress博客平台,请参考部署WordPress博客系统搭建Discuz论坛平台,请参考搭建Discuz论坛网站。更云解析服务支持为域名快速添…

    2022年10月3日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号