P4560 [IOI2014] Wall 砖墙

2024-09-06 06:04
文章标签 p4560 ioi2014 wall 砖墙

本文主要是介绍P4560 [IOI2014] Wall 砖墙,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

*原题链接*

做法:线段树

一道比较基础的线段树练手题,区间赋值,在修改时加些判断剪枝。

对于add操作,如果此时区间里的最小值都大于等于h的话,就没必要操作,如果最大值都小于h的话,就直接区间赋值为h。对于remove操作同理。

时间复杂度大致为O(nlogn),实际会比这个要大一些。

#include<bits/stdc++.h>
using namespace std;
const int N=2e6+10,INF=0x3f3f3f3f;int n,k;struct node{int l,r;int mn,mx,tag;
}tr[N*4];int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-1') f=-1;ch=getchar();}while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();return x*f;
}void pushdown(int u){if(tr[u].tag==INF) return;tr[u<<1].mn=tr[u<<1].mx=tr[u<<1].tag=tr[u].tag;tr[u<<1|1].mn=tr[u<<1|1].mx=tr[u<<1|1].tag=tr[u].tag;tr[u].tag=INF;
}void pushup(int u){tr[u].mn=min(tr[u<<1].mn,tr[u<<1|1].mn);tr[u].mx=max(tr[u<<1].mx,tr[u<<1|1].mx);
}void build(int u,int l,int r){if(l==r) tr[u]={l,r,0,0,INF};else{tr[u].l=l,tr[u].r=r;int mid=(l+r)>>1;build(u<<1,l,mid),build(u<<1|1,mid+1,r);pushup(u);}
}void modify1(int u,int l,int r,int x){//Addif(tr[u].l>=l&&tr[u].r<=r){if(tr[u].mn>=x) return;if(tr[u].mx<=x){tr[u].mn=tr[u].mx=tr[u].tag=x;return;}}pushdown(u);int mid=(tr[u].l+tr[u].r)>>1;if(l<=mid) modify1(u<<1,l,r,x);if(r>mid) modify1(u<<1|1,l,r,x);pushup(u);
}void modify2(int u,int l,int r,int x){//Removeif(tr[u].l>=l&&tr[u].r<=r){if(tr[u].mx<=x) return;if(tr[u].mn>=x){tr[u].mn=tr[u].mx=tr[u].tag=x;return;}}pushdown(u);int mid=(tr[u].l+tr[u].r)>>1;if(l<=mid) modify2(u<<1,l,r,x);if(r>mid) modify2(u<<1|1,l,r,x);pushup(u);
}int query(int u,int x){if(tr[u].l==x&&tr[u].r==x) return tr[u].mx;pushdown(u);int mid=(tr[u].l+tr[u].r)>>1;if(x<=mid) return query(u<<1,x);return query(u<<1|1,x);
}int main(){n=read(),k=read();build(1,1,n);while(k--){int opt=read(),l=read(),r=read(),h=read();l++,r++;if(opt==1) modify1(1,l,r,h);else modify2(1,l,r,h);}for(int i=1;i<=n;i++) cout<<query(1,i)<<endl;return 0;
}

这篇关于P4560 [IOI2014] Wall 砖墙的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141199

相关文章

Codeforces 398B Painting The Wall(dp)

题目链接:Codeforces 398B Painting The Wall 题目大意:给出n和m,表示在一个n*n的平面上有n*n个瓷砖,其中有m块已经涂色。现在随机选中一块进行涂色(如果已经涂色跳过,也消耗时间),消耗1个步骤。终止条件为每行每列都有至少有一块瓷砖被涂色。问说涂成满意的情况需要时间的期望。 解题思路:现场出不来这道题,看来练的还是太少。题目可以理解成行涂n行,列

uva 1303 - Wall(凸包)

题目链接:uva 1303 - Wall 求出凸包加个圆周。 #include <cstdio>#include <cstring>#include <cmath>#include <vector>#include <complex>#include <algorithm>using namespace std;typedef pair<int,int> pii;

UVA 1045 - The Great Wall Game(二分图完美匹配)

UVA 1045 - The Great Wall Game 题目链接 题意:给定一个n*n的棋盘,有n个棋子在上面,现在要移动棋子,每一步代价是1,现在要把棋子移动到一行,一列,或者在主副对角线上,问最小代价 思路:二分图完美匹配,枚举每种情况,建边,边权为曼哈顿距离,然后km算法做完美匹配算出值即可,由于要求最小值所以边权传负数,这样做出来的值的负就是答案 代码: #

1.-Os -Wall -Werror

在Makefile编译中,如果加上-Os -Wall -Werror,则可以防止函数定义未使用,当定义未使用时,会报错,而不是警告,保证了程序的正确运行. 还可以将程序中所有的warning都指示成为error,防止程序因为warning造成程序的不稳定性. 但是当打印调试时,需要取消.否则程序会编译不过去而出错. 举例: gcc main.c -Os -Wall -Werror -o

linux 聊天命令 write talk wall

Linux下常用的“聊天”命令 ##其实也可以直接使用nc(大名顶顶的netcat)来进行简单的通讯 当我们在Linux的终端下使用命令“who”或“w”时,我们总会看到一长串的用户列表,此时,你是不是很想发送一个消息给他/她。如果她是一个你心仪很久的MM,而你正好看到她也在,迫于害羞的你,是不是此时想发送一个消息给她,说声“hello,你也在呀”或是“咦,这么巧”。 嘿嘿,你是不是很期待

最前沿・量子退火建模方法(2) : Domain wall encoding讲解和python实现

前言 上篇讲的subQUBO属于方法论,这次讲个通过编码量子比特的方式,同样的约束条件,不同的编码,所需的量子比特数是不同的。有的编码方式,很节省量子比特。比如,这次要讲的Domain wall encoding。 一、Domain wall encoding是什么? 1.1 直觉上的理解 Domain wall的概念来自于物理学,具体的由来我还没有考古,等我有时间了再补充。 它主要

revit API 获得 wall 真正 locationCurve

Curve GetWallRealLocationCurve(Wall m_wall){Curve oldCurve = (m_wall?.Location as LocationCurve)?.Curve;if (oldCurve == null){return null;}double baseOffset = 0;var param = m_wall.get_Parameter(BuiltI

HDU 3669 [Cross the Wall] DP斜率优化

问题分析 首先,如果一个人的\(w\)和\(h\)均小于另一个人,那么这个人显然可以被省略。如果我们将剩下的人按\(w[i]\)递增排序,那么\(h[i]\)就是递减。 之后我们考虑DP。 我们设\(f[i][j]\)为到第\(i\)个人,打了\(j\)个洞的花费。于是我们可以得到如下DP过程: for( LL i = 1; i <= N; ++i ) F[ i ][ 1 ] = w[ i ]

计算几何:极角排序(poj 2007 Scrambled Polygon)与简单凸包(poj 1113 Wall)

ps:好久没来写博客了..准备重新开始了、两道简单题 poj 2007:http://poj.org/problem?id=2007  按照(0,0)逆时针排序,由于在-180 ~ 180之内,直接叉积极角排序即可 /*将p[1]到p[m-1]的点根据p[0]按逆时针方向输出排序*/#include <iostream>#include <algorithm>#include

druid配置wall导致无法批量sql

1、现象 2、原配置 spring:autoconfigure:exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfiguredatasource:druid:stat-view-servlet:enabled: trueloginUsername: ***loginPassword: