[IOI2014]Wall

题目大意:

给你一个长度为\(n(n\le2\times10^6)\)的数列,初始全为\(0\)。\(m(m\le5\times10^5)\)次操作,每次让区间\([l_i,r_i]\)对\(h_i\)取\(\max/\min\),求最后每一个数的值。

思路:

线段树维护区间内数的上界和下界。

源代码:

#include<climits>
#include<algorithm>
#include"lib1895.h"
const int N=2e6+1;
class SegmentTree {
#define _left <<1
#define _right <<1|1
#define mid ((b+e)>>1)
private:
int u[N<<2],d[N<<2];
void upd1(const int &p,const int &x) {
if(u[p]!=INT_MAX&&d[p]>=x) return;
d[p]=std::max(d[p],x);
u[p]=std::max(u[p],x);
}
void upd2(const int &p,const int &x) {
if(d[p]!=INT_MIN&&u[p]<=x) return;
u[p]=std::min(u[p],x);
d[p]=std::min(d[p],x);
}
void push_down(const int &p) {
if(d[p]!=INT_MIN) {
upd1(p _left,d[p]);
upd1(p _right,d[p]);
d[p]=INT_MIN;
}
if(u[p]!=INT_MAX) {
upd2(p _left,u[p]);
upd2(p _right,u[p]);
u[p]=INT_MAX;
}
}
public:
void build(const int &p,const int &b,const int &e) {
u[p]=INT_MAX;
d[p]=INT_MIN;
if(b==e) return;
build(p _left,b,mid);
build(p _right,mid+1,e);
}
void modify1(const int &p,const int &b,const int &e,const int &l,const int &r,const int &x) {
if(b==l&&e==r) {
upd1(p,x);
return;
}
push_down(p);
if(l<=mid) modify1(p _left,b,mid,l,std::min(mid,r),x);
if(r>mid) modify1(p _right,mid+1,e,std::max(mid+1,l),r,x);
}
void modify2(const int &p,const int &b,const int &e,const int &l,const int &r,const int &x) {
if(b==l&&e==r) {
upd2(p,x);
return;
}
push_down(p);
if(l<=mid) modify2(p _left,b,mid,l,std::min(mid,r),x);
if(r>mid) modify2(p _right,mid+1,e,std::max(mid+1,l),r,x);
}
int query(const int &p,const int &b,const int &e,const int &x) {
if(b==e) {
int ret=0;
ret=std::max(ret,d[p]);
ret=std::min(ret,u[p]);
return ret;
}
int ret=0;
push_down(p);
if(x<=mid) ret=query(p _left,b,mid,x);
if(x>mid) ret=query(p _right,mid+1,e,x);
return ret;
}
#undef _left
#undef _right
#undef mid
};
SegmentTree sgt;
void buildWall(int n,int m,int opt[],int l[],int r[],int h[],int ans[]) {
sgt.build(1,1,n);
for(register int i=0;i<m;i++) l[i]++;
for(register int i=0;i<m;i++) r[i]++;
for(register int i=0;i<m;i++) {
if(opt[i]==1) sgt.modify1(1,1,n,l[i],r[i],h[i]);
if(opt[i]==2) sgt.modify2(1,1,n,l[i],r[i],h[i]);
}
for(register int i=0;i<n;i++) {
ans[i]=sgt.query(1,1,n,i+1);
}
}

[IOI2014]Wall的更多相关文章

  1. 4364: [IOI2014]wall砖墙

    4364: [IOI2014]wall砖墙 链接 分析: 线段树,维护一个最大值,一个最小值. 代码: #include<bits/stdc++.h> ],*p1 = buf,*p2 = ...

  2. bzoj4364: [IOI2014]wall砖墙

    线段树打标记的好(luo)题 打打标记,记得下移 = =听说2000000是用来卡线段树的 = =怎么办呢,,, = =打个读入优化看看能不能卡过去吧 #include<cstdio> # ...

  3. BZOJ4364: [IOI2014]wall砖墙(线段树)

    题意 题目链接 Sol 一个显然的思路是维护最大最小值以及最大最小值的覆盖标记. https://paste.ubuntu.com/p/WXpBvzF6Y2/ 但实际上因为这题只需要输出最后的操作序列 ...

  4. 【[IOI2014]Wall 砖墙】

    好像随便一卡就最优解了 malao告诉我这道题挺不错的,于是就去写了写 这两个操作很有灵性啊,感觉这么有特点的数大概是需要分块维护的吧 但是并没有什么区间查询,只是在最后输出整个序列 于是我们就直接用 ...

  5. BZOJ4364:[IOI2014]Wall

    浅谈区间最值操作与历史最值问题:https://www.cnblogs.com/AKMer/p/10225100.html 题目传送门:https://lydsy.com/JudgeOnline/pr ...

  6. P4560 [IOI2014]Wall 砖墙

    题目描述 给定一个长度为 nn且初始值全为 00的序列.你需要支持以下两种操作: Add L, R, hL,R,h:将序列 [L, R][L,R]内所有值小于 hh的元素都赋为 hh,此时不改变高度大 ...

  7. LUOGU P4560 [IOI2014]Wall 砖墙 (线段树)

    传送门 解题思路 线段树打标记,刚开始想复杂了,维护了四个标记.后来才知道只需要维护一个最大值最小值即可,然后更新的时候分类讨论一下. 代码 #include<iostream> #inc ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. 「IOI2014」Wall 砖墙

    题目描述 给定一个初始元素为 \(0\) 的数列,以及 \(K\) 次操作: 将区间 \([L, R]\) 中的元素对 \(h\) 取 \(max\) 将区间 \([L, R]\) 中的元素对 \(h ...

随机推荐

  1. 把tomcat服务器配置为windows服务的方法

    转自:http://ykyfendou.iteye.com/blog/2032916 使用tomcat开发的项目,我们把项目交付给客户的时候,客户都不希望在每次开机的时候都要启动一下tomcat服务器 ...

  2. easyui组件window拖动时超过浏览器顶部则无法拖回

    项目研发过程中遇到一个问题,easyui的window可以随意拖动或者放大缩小,但是鼠标只有放在“header”上面时鼠标箭头才会变成四个方向的箭头,也就是只有在这时才能拖动窗口:但是当拖动的窗口超过 ...

  3. Jmeter3.0 中文乱码的解决方法

    在Body Data中输入中文时,发现是乱码,如下图 这种情况在jmeter3.0的版本中才会产生,由于3.0中优化body data后,使用默认的字体(Consolas)不支持汉字的显示. 解决方法 ...

  4. python 装饰器--对有无参数的函数进行装饰

    # 使用装饰器无参数的函数进行装饰# def func(funcionName): # print('-----1------') # def func_in(): # print('--func_i ...

  5. python with语句中的变量有作用域吗?

    一直以为python中的with语句中的变量,只在with语句块中起作用.不然为什么要缩进一个级别呢? 呵呵,然而并没有为with语句内的变量创建新的作用域. 举例: # test.py with o ...

  6. Android实时取景:用SurfaceView实现

    对于基于摄像头的Android应用,实时取景是一个基本前提,通过前置或后置摄像头持续获取捕获到的内容,可以进一步做处理(人脸检测.美颜.滤镜等). 所谓实时取景,简单说就是调用android的摄像头, ...

  7. Http系列笔记

    万能的HttpClient (Framework与NetCore 都支持) string url = "http://localhost:5000/api/values"; //p ...

  8. 【Maven】Select Dependency 无法检索

    问题: 在 “pom.xml” 中,点击  “Dependencies” -> “Add” 添加依赖时,无法检索. 如下图所示: 解决办法:   依次点击 “Windows”->“Show ...

  9. 【BZOJ2698】染色

    题解: 首先比较显然的是查询每个点被覆盖的概率,算完之后概率m次方 既然是计数题 考虑容斥 我们会发现这样是求n长度的区间能存多少种 我们考虑直接递推 从n到n+1 多的方案数一定要覆盖n+1,所以就 ...

  10. python之squid实现免费 IP代理 (windows win7 单机 本机 本地 正向代理 区分 HTTPS)

    0.目录 1.思路2.windows安装3.相关命令行4.简单配置和初步使用5.问题:squid是否支持HTTPS6.问题:配置多个代理条目,相同ip不同port报错7.问题:根据代理请求区分HTTP ...