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


相关推荐

  • Linux 应用编程之stat 函数

    Linux 应用编程之stat 函数#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>intstat(constchar*pathname,structstat*buf);pathname:用于指定一个需要查看属性的文件路径。buf:structstat类型指针,用于指向一个structstat结构体变量。调用stat函数的时候需要传入一个structstat变量的指针,获取到的文件..

    2025年7月25日
    1
  • plc梯形图讲解_plc编程入门梯形图

    plc梯形图讲解_plc编程入门梯形图导读:初学PLC梯形图编程,应要遵循一定的规则,并养成良好的习惯。下面以三菱FX系列PLC为例,简单介绍一下PLC梯形图编程时需要遵循的规则,希望对大家有所帮助。有一点需要说明的是,本文虽以三菱PLC为例,但这些规则在其它PLC编程时也可同样遵守。OFweek工控网讯:初学PLC梯形图编程,应要遵循一定的规则,并养成良好的习惯。下面以三菱FX系列PLC为例,简单介绍一下PLC梯

    2022年9月10日
    2
  • netstat详解「建议收藏」

    netstat详解「建议收藏」netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。语法:netstat[选项]参数:-a或–all:显示所有连线中的Socket;-A<网络类型>或–<网络类型>:列出该网络类型连线中的相关地址;-c或–continuous:持续列出网络状态;-C…

    2022年7月23日
    10
  • pycharm终止程序快捷键_pycharm代码补全快捷键

    pycharm终止程序快捷键_pycharm代码补全快捷键不小心进行了错误的操作,想要回到前一步操作的时候撤销与反撤销操作:Ctrl+z,Ctrl+Shift+z

    2022年8月29日
    5
  • PopupWindow错误:PopupWindow$1.onScrollChanged 出现 NullPointerException和PopupViewContainer.dispatchKeyEv…

    PopupWindow错误:PopupWindow$1.onScrollChanged 出现 NullPointerException和PopupViewContainer.dispatchKeyEv…

    2021年8月28日
    59
  • 2019 Python接口自动化测试框架实战开发(一)

    2019 Python接口自动化测试框架实战开发(一)说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!目录一丶叙述二丶接口基础知识三丶接口测试工具四丶Fiddler的使用五丶unittest使用六丶mock服务入门到实战七丶接口自动化框架设计到开发一丶叙述1.项目介绍整个项目分为四个部分:接口基础丶接口开发丶Unittest与接口测试结合以及接口自动化框架从设计到开发接口基础包括:H…

    2022年4月30日
    36

发表回复

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

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