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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ideaIU-2022.01.4 激活码-激活码分享2022.03.13

    (ideaIU-2022.01.4 激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年4月2日
    244
  • 语义分割如何做标注_语义分割转实例分割

    语义分割如何做标注_语义分割转实例分割在进行Segmentation训练之前需要准备训练集和验证集,本文将要来介绍如何使用LabelMe进行标记。LabelMe是个可以绘制多边形、矩形、圆形、直线、点的一套标记工具,可用于分类、目标检测、语义分割、实例分割任务上的数据标注。1.label安装与数据标注首先安装LabelMe,我使用Anaconda进行安装。打开AnacondaPrompt执行以下指令:pipinstalllabelme接着输入labelme会出现以下UI介面,点选OpenDir选择要标记的图片资料

    2022年8月23日
    8
  • Android如何下抓取tcp数据包[通俗易懂]

    如果要抓TCP数据包,我们可以使用TCPdump工具,具体方法是: 下载tcpdump,  还有个地址是http://www.strazzere.com/android/tcpdump,不知道具体版本。  详细使用请参考http://www.tcpdump.org/里

    2022年4月14日
    212
  • Sample rate 理解「建议收藏」

    Sample rate 理解「建议收藏」在Gnuradio中,我们可以看到很多模块中都有Samplerate这个概念然后看到一个说明 Anyprocessingblock’s’SampleRate’parameterisusedforDSPcalculation,notforcontrollingtherateatwhichsamplesareproduced.Thisisdis

    2022年10月17日
    0
  • 此工作站和主域间的信任关系失败原因_主域间的信任关系失败

    此工作站和主域间的信任关系失败原因_主域间的信任关系失败相信用域管理的童鞋都会遇到一个问题:在域账户登录的时候有时会出现“此工作站和主域间信任关系失败”那么遇到这种情况该如何解决的呢?跟我走:拔掉网线,登录系统在用户账户中把administrator账户打开,并设密码插上网线,退域,重启,用administrator账户登录重新加域,刷新策略即可 转载于:https://blog.51cto.com/xkai20/158…

    2022年10月19日
    0
  • OpenResty 最佳实践学习–实战演习笔记(2)

    在前面一篇中已经介绍了Openresty的相关知识和一个简单的hello world的访问。本篇依然是延续上一篇进行讲解。 需要提前申明的是我环境有问题。重新安装了一次openresty,这次安装的目录和上一次不一样了。一:环境说明:虚拟机 :CentOs 6.3 32位OpenResty 安装目录 : /opt/openresty/版本: /opt/openresty/nginx/sbi

    2022年2月26日
    51

发表回复

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

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