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


相关推荐

  • python进入文件目录 命令_python创建目录

    python进入文件目录 命令_python创建目录python进入到指定目录下的方法:Python可以使用os.chdir()方法转到指定目录。os.chdir()方法用于改变当前工作目录到指定的路径。chdir()方法语法格式如下:os.chdir(path)参数path–要切换到的新路径。实例以下实例演示了chdir()方法的使用:#!/usr/bin/python#-*-coding:UTF-8-*-importos,…

    2022年8月31日
    6
  • mysql explain ref const_MySQL EXPLAIN 详解「建议收藏」

    mysql explain ref const_MySQL EXPLAIN 详解「建议收藏」一.介绍EXPLAIN命令用于SQL语句的查询执行计划。这条命令的输出结果能够让我们了解MySQL优化器是如何执行SQL语句的。这条命令并没有提供任何调整建议,但它能够提供重要的信息帮助你做出调优决策。先解析一条sql语句,你可以看出现什么内容EXPLAINSELECT*FROMperson,deptWHEREperson.dept_id=dept.didandper…

    2022年10月18日
    4
  • 用LINUX架设FTP服务器

    用LINUX架设FTP服务器第二章用LINUX架设FTP服务器2.1什么是FTP2.2安装Wu-FTP2.3让FTP服务器跑起来2.4配置文件的设置2.5开设只能FTP的帐户2.6设置虚拟FTP主机 2.1什么是FTP:文件传输协议原理互联网文件传输协议(FileTransferProtocol,FTP)标准是在RFC959说明的。该协议定义了一个从远程计算机系统和本地计算机系统之

    2022年7月21日
    16
  • 数组对象转json格式[通俗易懂]

    数组对象转json格式[通俗易懂]1、数组转化成JSON对象后,key值是索引,value是数组对应的值。//数组也可以转化成JSON对象varjStr3="[[10,20,30],40,50,60]";varj3=JSON.parse(jStr3);for(letkeyinj3){console.log(‘key:’,key);}//key…

    2026年1月19日
    3
  • ADO数据库C#中ExecuteReader、ExecuteNonQuery、ExecuteScalar、SqlDataReader、SqlDataAdapter

    ADO数据库C#中ExecuteReader、ExecuteNonQuery、ExecuteScalar、SqlDataReader、SqlDataAdapter用于执行增,删,改的方法,支持存储过程1.ExecuteNonQuery数据库连接字符串:privatereadonlystaticstringconnectionString=ConfigurationManager.ConnectionStrings["MyConnection"].ToString();连接字符串,自满足,请用SqlHelper.con…

    2022年6月20日
    31
  • 在线涂改图片 php,php网站怎么修改图片[通俗易懂]

    在线涂改图片 php,php网站怎么修改图片[通俗易懂]主要还是用到php中的GD库中的函数upload_image.php,主要是一个上传控件,用来选择图片YourusernameUploadimage**Acceptableimageformatsinclude:GIF,JPG/JPEGandPNG.ImageCaption然后是上传和处理图片的逻辑check_image.php…

    2025年9月28日
    3

发表回复

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

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