当前位置:网站首页>HDU 4391 Paint The Wall 段树(水
HDU 4391 Paint The Wall 段树(水
2022-07-05 21:39:00 【全栈程序员站长】
大家好,又见面了,我是全栈君
意甲冠军:
特定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.cn/117563.html原文链接:https://javaforall.cn
边栏推荐
- Defect detection - Halcon surface scratch detection
- Simple interest mode - evil Chinese style
- Postgres establish connection and delete records
- [case] Application of positioning - Taobao rotation map
- Four components of logger
- 怎么利用Tensorflow2进行猫狗分类识别
- Golang (1) | from environmental preparation to quick start
- sql常用语法记录
- 总结出现2xx、3xx、4xx、5xx状态码的原因
- postgis 安装地理信息扩展
猜你喜欢
Chapter 05_ Storage engine
R语言【数据管理】
资深电感厂家告诉你电感什么情况会有噪音电感噪音是比较常见的一种电感故障情况,如果使用的电感出现了噪音大家也不用着急,只需要准确查找分析出什么何原因,其实还是有具体的方法来解决的。作为一家拥有18年品牌
秋招将临 如何准备算法面试、回答算法面试题
MQ----activeMq
Introduction of ArcGIS grid resampling method
深信服X计划-网络协议基础 DNS
Five layer network protocol
Zhang Lijun: la pénétration de l’incertitude dépend de quatre « invariants»
Two ways to realize video recording based on avfoundation
随机推荐
2.2 basic grammar of R language
Deep merge object deep copy of vant source code parsing
ESP32
[daily training -- Tencent select 50] 89 Gray code (only after seeing the solution of the problem)
Exercise 1 simple training of R language drawing
Utils/index TS tool function
Uni app Bluetooth communication
regular expression
Objects in the list, sorted by a field
PostGIS installation geographic information extension
资深电感厂家告诉你电感什么情况会有噪音电感噪音是比较常见的一种电感故障情况,如果使用的电感出现了噪音大家也不用着急,只需要准确查找分析出什么何原因,其实还是有具体的方法来解决的。作为一家拥有18年品牌
校招期间 准备面试算法岗位 该怎么做?
Zhang Lijun: penetrating uncertainty depends on four "invariants"
張麗俊:穿透不確定性要靠四個“不變”
How to send samples when applying for BS 476-7 display? Is it the same as the display??
Summary of data analysis steps
力扣------经营摩天轮的最大利润
Kingbasees v8r3 cluster maintenance case -- online addition of standby database management node
Opérations de lecture et d'écriture pour easyexcel
oracle 控制文件的多路复用