bzoj4364: [IOI2014]wall砖墙

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

打打标记,记得下移

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

= =怎么办呢,,,

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

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

又臭又长+1

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

时间: 2024-11-03 05:24:39

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

[IOI2014] Wall 砖墙

题目描述 给定一个初始元素为 \(0\) 的数列,以及 \(K\) 次操作: 将区间 \([L, R]\) 中的元素对 \(h\) 取 \(max\) 将区间 \([L, R]\) 中的元素对 \(h\) 取 \(min\) 解题思路 首先要能看出来这是一道线段树的题. 那么我们要如何建立一个节点呢? 首先,对于每一个线段树上的节点,我们记两个标记 \(Min\) 和 \(Max\) . 因为题目涉及到 \(min\) 和 \(max\) 操作,所以应该不难想到设两个这样的标记. 这两个标记的意

554. Brick Wall 砖墙

There is a brick wall in front of you. The wall is rectangular and has several rows of bricks. The bricks have the same height but different width. You want to draw a vertical line from the top to the bottom and cross the least bricks. The brick wall

2019寒假小记

Preface 菜鸡HL终于艰难地熬过了初三的一个学期迎来了寒假. 但是由于某些不可言说的政策问题所以他要没高中读了,只能开始准备中考. 所以这个寒假可能并不像想象中的那样可以大量刷题好吧题还是要做的 希望\(ZJOI\)能\(Keep\ good\ luck\)吧,进不了前\(48\)就要考虑退役了. 1-26 早上搬东西发成绩单听老杨浩BB,搞到\(10\)点种才放. ZLX很早就走了,心想有点不对,肯定是去机房了. 所以推测HW的人都去机房了,于是我决定也去机房玩玩. 把东西拿到老爸车上就

IOI2014题解

这个东西还是应该写写博客的,毕竟IOI 题目连接已给出,直接点击大标题(推荐网络OJ:Universal Online Judge) IOI2014 Rail 题目有点难看,耐心-- 题目是说给出任意两段车站的距离(你只能得知其中的3(n?1)对距离)和0车站的位置,让你确定每个车站的位置和类型C或D 距离的定义请看题 题目保证0车站为C类型 直接说正确的解法(部分分很水请独立思考) 我们会发现: 1.车站x到y的距离==车站y到x的距离 2.离距离某个C类型车站最近的车站一定是右方向上最近的D

CSS3绘制砖墙-没有用任何图片

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

Leetcode 554.砖墙

砖墙 你的面前有一堵方形的.由多行砖块组成的砖墙. 这些砖块高度相同但是宽度不同.你现在要画一条自顶向下的.穿过最少砖块的垂线. 砖墙由行的列表表示. 每一行都是一个代表从左至右每块砖的宽度的整数列表. 如果你画的线只是从砖块的边缘经过,就不算穿过这块砖.你需要找出怎样画才能使这条线穿过的砖块数量最少,并且返回穿过的砖块数量. 你不能沿着墙的两个垂直边缘之一画线,这样显然是没有穿过一块砖的. 示例: 输入: [[1,2,2,1], [3,1,2], [1,3,2], [2,4], [3,1,2]

HDOJ 1348 Wall 凸包

Wall Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4001    Accepted Submission(s): 1131 Problem Description Once upon a time there was a greedy King who ordered his chief Architect to build a

hdu 1348 Wall(凸包模板题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1348 Wall Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3386    Accepted Submission(s): 968 Problem Description Once upon a time there was a gre

POJ1113 Wall【凸包】

Wall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24604   Accepted: 8183 Description King想在自己的n个城堡外建Wall,使Wall与任一城堡距离至少为L且能围住它的城堡. 求Wall最短长度. Input 第一行为 N (3 <= N <= 1000) 和 L(1 <= L <= 1000). 接下来 N 行,每行为城堡坐标Xi,Yi (-10000 <=