线段树打标记的好(luo)题

打打标记,记得下移

= =听说2000000是用来卡线段树的

= =怎么办呢,,,

= =打个读入优化看看能不能卡过去吧

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int M=;
int n,m,i,opt,l,r,x;
int mx1[M*],mx2[M*];
int read()
{
int x=,f=;char ch=getchar();
while (ch<''||ch>''){if (ch=='-')f=-;ch=getchar();}
while (ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
void pushdown(int p)
{
int l=p<<,r=p<<^;
if (mx2[p]>mx1[l])mx1[l]=mx2[l]=mx2[p];
else if (mx2[p]>mx2[l])mx2[l]=mx2[p];
if (mx2[p]>mx1[r])mx1[r]=mx2[r]=mx2[p];
else if (mx2[p]>mx2[r])mx2[r]=mx2[p];
if (mx1[p]<mx2[l])mx1[l]=mx2[l]=mx1[p];
else if (mx1[p]<mx1[l])mx1[l]=mx1[p];
if (mx1[p]<mx2[r])mx1[r]=mx2[r]=mx1[p];
else if (mx1[p]<mx1[r])mx1[r]=mx1[p];
}
void pushup(int p)
{
int l=p<<,r=p<<^;
mx1[p]=max(mx1[l],mx1[r]);
mx2[p]=min(mx2[l],mx2[r]);
}
void update1(int x,int y,int l,int r,int p,int t)
{
if (x==l&&y==r){
mx1[p]=max(mx1[p],t);
mx2[p]=max(mx2[p],t);
return;
}
int mid=l+r>>;
pushdown(p);
if (y<=mid)update1(x,y,l,mid,p<<,t);
else if (x>mid)update1(x,y,mid+,r,p<<^,t);
else update1(x,mid,l,mid,p<<,t),update1(mid+,y,mid+,r,p<<^,t);
pushup(p);
}
void update2(int x,int y,int l,int r,int p,int t)
{
if (x==l&&y==r){
mx1[p]=min(mx1[p],t);
mx2[p]=min(mx2[p],t);
return;
}
int mid=l+r>>;
pushdown(p);
if (y<=mid)update2(x,y,l,mid,p<<,t);
else if (x>mid)update2(x,y,mid+,r,p<<^,t);
else update2(x,mid,l,mid,p<<,t),update2(mid+,y,mid+,r,p<<^,t);
pushup(p);
}
void build(int l,int r,int p)
{
if (l==r){
printf("%d\n",mx1[p]);
return;
}
int mid=l+r>>;
pushdown(p);
build(l,mid,p<<);
build(mid+,r,p<<^);
}
int main()
{
n=read(),m=read();
for (i=;i<=m;i++){
opt=read();
l=read(),r=read(),x=read();
l++;r++;
if (opt==)
update1(l,r,,n,,x);
else
update2(l,r,,n,,x);
}
}
build(,n,);
}

又臭又长+1

两个更新可以合在一起的,但是懒得改了

bzoj4364: [IOI2014]wall砖墙的更多相关文章

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

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

  2. 4364: [IOI2014]wall砖墙

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

  3. 【[IOI2014]Wall 砖墙】

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

  4. P4560 [IOI2014]Wall 砖墙

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

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

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

  6. [IOI2014]Wall

    [IOI2014]Wall 题目大意: 给你一个长度为\(n(n\le2\times10^6)\)的数列,初始全为\(0\).\(m(m\le5\times10^5)\)次操作,每次让区间\([l_i ...

  7. BZOJ4364:[IOI2014]Wall

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

  8. 「IOI2014」Wall 砖墙

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

  9. bzoj AC倒序

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

随机推荐

  1. Angular2.0快速开始

    参考资料: Angular2.0快速开始 AngularJS2 教程

  2. util类中非静态方法中注入serivce,在controller层是使用util。

    今天碰到如题的问题,刚一开始在util中注入service总是注入失败,起初我以为是util中没有注入成功,debug看了一下果然注入不进来. 然后各种纠结,最终坑爹的问题是在controller直接 ...

  3. Android高手速成--第二部分 工具库

    主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过依赖注入减少Vie ...

  4. 一些PHP性能优化汇总

    PHP优化对于PHP的优化主要是对php.ini中的相关主要参数进行合理调整和设置,以下我们就来看看php.ini中的一些对性能影响较大的参数应该如何设置. # vi /etc/php.ini (1) ...

  5. PHP使用数组依次替换字符串中匹配项

    select * from table where ctime >= '[date-14]' and ctime <= '[date-1]'; 想把上面这句sql的中括号表示的日期依次换成 ...

  6. java基础 作业(一)

    题目: 跳水比赛,8个评委打分.运动员的成绩是8个成绩去掉一个最高分,去掉一个最低分,剩下的6个分数 的平均分就是最后 得分.使用以为数组实现打分功能 .请把打分最高的评委和最低的评委找出来. 解析: ...

  7. Android模拟位置信息

    Android模拟位置程序,俗称GPS欺骗,只能修改采用GPS定位的软件. 手机定位方式目前有4种:基站定位,WIFI定位,GPS定位,AGPS定位 常见的修改手法: 1. 抓包欺骗法,抓包改包欺骗服 ...

  8. EF框架的三种工作方式

    EF框架step by step(1)—Database-First EF框架step by step(2)—Model-First EF框架step by step(3)—Code-First 通过 ...

  9. 去哪儿网输入框三种输入方式(selenium webdriver 干货)

    在机票预定的页面,输入出发城市和到达城市输入框的时候, 发现直接使用sendkeys不好使, 大部分情况出现输入某城市后没有输入进去, 经过几天的研究,发现可以采取三种方式: 1. 先点击输入框,待弹 ...

  10. ACM/ICPC 之 Dinic算法(POJ2112)

    Optimal Milking //二分枚举最大距离的最小值+Floyd找到最短路+Dinic算法 //参考图论算法书,并对BFS构建层次网络算法进行改进 //Time:157Ms Memory:65 ...