BZOJ4364:[IOI2014]Wall
浅谈区间最值操作与历史最值问题:https://www.cnblogs.com/AKMer/p/10225100.html
题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=4364
似乎可以不用吉司机线段树的作法……因为只需要维护区间最大最小值,也只有区间取最大最小值操作,所以可以直接用普通的线段树延迟标记解决这道问题。只要把最大值标记和最小值标记之间的关系处理得当即可。
时间复杂度:\(O((n+m)logn)\)
空间复杂度:\(O(n)\)
代码如下:
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=2e6+6,inf=1e9;
int n,m;
int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
}
struct segmemt_tree {
int mx[maxn<<2],mn[maxn<<2];
int tagmx[maxn<<2],tagmn[maxn<<2];
void update(int p) {
mx[p]=max(mx[p<<1],mx[p<<1|1]);
mn[p]=min(mn[p<<1],mn[p<<1|1]);
}
void build(int p,int l,int r) {
tagmx[p]=-inf,tagmn[p]=inf;
if(l==r)return;
int mid=(l+r)>>1;
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
}
void Max_tag(int p,int v) {
mx[p]=max(mx[p],v),mn[p]=max(mn[p],v);
tagmx[p]=max(tagmx[p],v);tagmn[p]=max(tagmn[p],v);
}
void Min_tag(int p,int v) {
mx[p]=min(mx[p],v),mn[p]=min(mn[p],v);
tagmx[p]=min(tagmx[p],v),tagmn[p]=min(tagmn[p],v);
}
void push_down(int p) {
if(tagmx[p]!=-inf) {
Max_tag(p<<1,tagmx[p]);
Max_tag(p<<1|1,tagmx[p]);
tagmx[p]=-inf;
}
if(tagmn[p]!=inf) {
Min_tag(p<<1,tagmn[p]);
Min_tag(p<<1|1,tagmn[p]);
tagmn[p]=inf;
}
}
void Max(int p,int l,int r,int L,int R,int v) {
if(L<=l&&r<=R) {
Max_tag(p,v);
return;
}
int mid=(l+r)>>1;push_down(p);
if(L<=mid)Max(p<<1,l,mid,L,R,v);
if(R>mid)Max(p<<1|1,mid+1,r,L,R,v);
update(p);
}
void Min(int p,int l,int r,int L,int R,int v) {
if(L<=l&&r<=R) {
Min_tag(p,v);
return;
}
int mid=(l+r)>>1;push_down(p);
if(L<=mid)Min(p<<1,l,mid,L,R,v);
if(R>mid)Min(p<<1|1,mid+1,r,L,R,v);
update(p);
}
void print(int p,int l,int r) {
if(l==r) {printf("%d\n",mx[p]);return;}
int mid=(l+r)>>1;push_down(p);
print(p<<1,l,mid),print(p<<1|1,mid+1,r);
}
}T;
int main() {
n=read(),m=read();T.build(1,1,n);
for(int i=1;i<=m;i++) {
int opt=read(),l=read()+1,r=read()+1,v=read();
if(opt==1)T.Max(1,1,n,l,r,v);
else T.Min(1,1,n,l,r,v);
}T.print(1,1,n);
return 0;
}
BZOJ4364:[IOI2014]Wall的更多相关文章
- [IOI2014]Wall
[IOI2014]Wall 题目大意: 给你一个长度为\(n(n\le2\times10^6)\)的数列,初始全为\(0\).\(m(m\le5\times10^5)\)次操作,每次让区间\([l_i ...
- 4364: [IOI2014]wall砖墙
4364: [IOI2014]wall砖墙 链接 分析: 线段树,维护一个最大值,一个最小值. 代码: #include<bits/stdc++.h> ],*p1 = buf,*p2 = ...
- bzoj4364: [IOI2014]wall砖墙
线段树打标记的好(luo)题 打打标记,记得下移 = =听说2000000是用来卡线段树的 = =怎么办呢,,, = =打个读入优化看看能不能卡过去吧 #include<cstdio> # ...
- BZOJ4364: [IOI2014]wall砖墙(线段树)
题意 题目链接 Sol 一个显然的思路是维护最大最小值以及最大最小值的覆盖标记. https://paste.ubuntu.com/p/WXpBvzF6Y2/ 但实际上因为这题只需要输出最后的操作序列 ...
- P4560 [IOI2014]Wall 砖墙
题目描述 给定一个长度为 nn且初始值全为 00的序列.你需要支持以下两种操作: Add L, R, hL,R,h:将序列 [L, R][L,R]内所有值小于 hh的元素都赋为 hh,此时不改变高度大 ...
- 【[IOI2014]Wall 砖墙】
好像随便一卡就最优解了 malao告诉我这道题挺不错的,于是就去写了写 这两个操作很有灵性啊,感觉这么有特点的数大概是需要分块维护的吧 但是并没有什么区间查询,只是在最后输出整个序列 于是我们就直接用 ...
- LUOGU P4560 [IOI2014]Wall 砖墙 (线段树)
传送门 解题思路 线段树打标记,刚开始想复杂了,维护了四个标记.后来才知道只需要维护一个最大值最小值即可,然后更新的时候分类讨论一下. 代码 #include<iostream> #inc ...
- Linux编译工具:gcc入门
1. 什么是gcc gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器.最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还 ...
- Image Wall - jQuery & CSS3 图片墙效果
今天我们要为您展示如何基于 jQuery 和 CSS3 创建一个整洁的图片墙效果.我们的想法是在页面上洒上一些大小不同的缩略图,并在当我们点击图片时候显示丝带,会显示一些描述,再次点击缩略图时,丝带将 ...
随机推荐
- 使用ILookup<TKey, TElement> 接口查找集合
public class Program { public static void Main() { // 创建一个放入ilookup数据结构的School清单. List<School> ...
- TFS中工作项的定制- 字段功能定义
参考,翻译此页面All FIELD XML Elements Reference(http://msdn.microsoft.com/en-us/library/ms194953.aspx) 对于每一 ...
- MyBatis -- 一步步教你使用MyBatis
1.建立开发环境 1.1 创建项目,java项目或者javaweb项目均可,如图: 1.2 加入所须要的jar包到项目lib文件夹下 一个MyBatis-3.2.4.jar包 一个驱动包mysql ...
- 15.Django添加一个功能模块的步骤(和SpringMVC类比)
这里介绍如何在Django里新建一个模块,这个例子还是最简单的例子 通过浏览器访问 http://localhost:8000/hello/然后返回一个欢迎页 我是做java web出身的,这里用py ...
- IDEA 配置Tomcat 跑Jeecg项目
最近搞了个国人开发的开源项目,还不错,记录一下踩过得坑; 首先项目开源地址 下载就可以; 准备工作作者以介绍,不再详述; 1:我使用的IDEA作为开发工具- 首先导入pom.xml,下载依赖包(此过程 ...
- l如何把SQLServer表数据导出CSV文件,并带列名
http://jingyan.baidu.com/article/4b07be3c466b5d48b280f37f.html 微信公众号:
- SAP内表转XML文件
今天有个兄弟问如何实现以XML的方式输出内表的内容,这个问题我以前好像没有写过.倒不是不会写,而是写的方法太多了,有极其简单的,也有很复杂的,而且网上资料也很多. 找到以前写的一个程序,稍微修改了一下 ...
- awk 运算符(算术运算符,赋值运算符,关系运算符,逻辑运算符,正则运算符)说明
awk作为文本处理优秀工具之一,它有独自丰富的运算符.下面我们一起归纳总结一下,所有运算符. 可以分为:算术运算符,赋值运算符,关系运算符,逻辑预算法,正则运算符. 一.运算符介绍 运算符 描述 赋值 ...
- iOS 基本数据类型 和 指针 特点
基本数据类型 : 整型int, 字符型char , 浮点型 (float 和 double), 枚举型; -- 构造类型 : 数组类型, 结构体类型, 共用体类型; -- 指针类型 : 最终要的数据类 ...
- [转]Mysql命令
1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...