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 创建一个整洁的图片墙效果.我们的想法是在页面上洒上一些大小不同的缩略图,并在当我们点击图片时候显示丝带,会显示一些描述,再次点击缩略图时,丝带将 ...
随机推荐
- centos 安装 jdk PostgreSQL
1.下载: anzhuang jDK http://blog.csdn.net/youzhouliu/article/details/51183115 ----------------------- ...
- C#调用大漠插件
大漠插件是一个很不错的东西,在按键精灵和易语言里面用得很多,可以后台找图找字,写游戏自动脚本用得特别多.前面写一个微信的自动脚本,查了一些资料,易语言不太熟悉,按键精灵功能上可能不好实现,就找了些资料 ...
- Vue-cli创建项目从单页面到多页面3-关于将打包后的项目文件不放在根目录下
关于将打包后的项目文件不放在根目录下 有时候,我们总是需要这样的设置:希望将打包后的文件放在a.b.com/somepath/这样一个路径下. 然而在vue-cli创建的项目中,默认的打包路径中的静态 ...
- 【leetcode刷题笔记】Reverse Nodes in k-Group
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...
- DB2常见错误
+098 01568 动态SQL语句用分号结束+100 02000 没有找到满足SQL语句的行+110 01561 用DATA CAPTURE定义的表的更新操作不能发送到原来的子系统+111 0159 ...
- 亚马逊EC2服务器登录方法
1.根据官网提供的方法登录连接到EC2服务器(官网推荐windows用户使用PUTTY连接) 2. 创建root的密码,输入如下命令: sudo passwd root 3.然后会提示你输入new p ...
- 第二天(1)声明式验证之使用验证框架验证域模型和ModelDriven验证
有一类特殊的属性,即这个属性的类型是另外一个JavaBean,如有一个User类,代码如下: package data; public class User { private String name ...
- spring boot项目启动报(No session repository could be auto-configured, check your configuration (session store type is 'null'))
找到项目的application配置文件,增加 spring.session.store-type=none,重新启动问题解决 注:因为项目未使用redis管理session,可以如上设置,如果想使用 ...
- Linux- AWS之EC2大数据集群定时开关机
众所周知,云计算就是在计算你的钱,每当ec2开起来就要开始计费.当用户购买了一个庞大的与服务器做一个集群,尤其是用来做大数据集群,这些服务器的配置相当高,每台服务器所需要的费用不菲.其实在很多时候没能 ...
- BI入门经典(转载)
原帖地址:http://blog.csdn.net/sgtzzc/archive/2009/10/10/4649770.aspx [前言] 昨天论坛的SQL Server大版新增了一个BI板块,大家讨 ...