hiho1080 更为复杂的买卖房屋姿势

题目链接:

hihocoder1080

题解思路:

题目中对区间修改有两个操作:

0   区间所有点增加v

1   区间所有点改为v

容易想到应该使用到两个懒惰标记  一个记录替换  一个记录增减

但这里会涉及到一个顺序问题 ,这里就需要考虑到 懒惰标记传递的策略:

如果出现替换标记 就应该把增减标记覆盖

如果同区间出现多个增减标记 则需要将标记叠加

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define maxn 100050
using namespace std;
int w[maxn<<2];
int tag[maxn<<2][2]= {0};
void push_up(int rt)
{
    w[rt]=w[rt<<1]+w[rt<<1|1];
}
void push_down(int rt,int len)
{
    if(tag[rt][1])             //替换标记
    {
        tag[rt<<1][1]=tag[rt<<1|1][1]=tag[rt][1];
        tag[rt<<1][0]=tag[rt<<1|1][0]=0;      //子节点的增减标记清0
        w[rt<<1]=(len-(len>>1))*tag[rt][1];
        w[rt<<1|1]=(len>>1)*tag[rt][1];
        tag[rt][1]=0;
    }
    if(tag[rt][0])             //增减标记
    {
        tag[rt<<1][0]+=tag[rt][0];         //叠加    是+=不是=!!!
        tag[rt<<1|1][0]+=tag[rt][0];       //叠加
        w[rt<<1]+=(len-(len>>1))*tag[rt][0];
        w[rt<<1|1]+=(len>>1)*tag[rt][0];
        tag[rt][0]=0;
    }
}
void build(int l,int r,int rt)
{
    if(l==r)
        scanf("%d",&w[rt]);
    else
    {
        int m=(l+r)>>1;
        build(lson);
        build(rson);
        push_up(rt);
    }
}
void update(int op,int L,int R,int v,int l,int r,int rt)
{
    if(L<=l&&R>=r)
    {
        if(op){
            w[rt]=(r-l+1)*v;
            tag[rt][1]=v;
            tag[rt][0]=0;             //增减标记清0
        }
        else
        {
            w[rt]+=(r-l+1)*v;         //叠加
            tag[rt][0]+=v;
        }
        return ;
    }
    push_down(rt,r-l+1);
    int m=(l+r)>>1;
    if(L<=m)
        update(op,L,R,v,lson);
    if(R>m)
        update(op,L,R,v,rson);
    push_up(rt);
}
  int main()
{
    int n,q,op,l,r,v;
    scanf("%d%d",&n,&q);
    build(0,n,1);
    while(q--)
    {
        scanf("%d%d%d%d",&op,&l,&r,&v);
        update(op,l,r,v,0,n,1);
        printf("%d\n",w[1]);
    }
    return 0;
}
时间: 2024-11-02 20:15:14

hiho1080 更为复杂的买卖房屋姿势的相关文章

hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新

#1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们可以化身上帝模式,买卖房产. 在这个游戏里,会不断的发生如下两种事件:一种是房屋自发的涨价或者降价,而另一种是政府有关部门针对房价的硬性调控.房价的变化自然影响到小Hi和小Ho的决策,所以他们希望能够知道任意时刻某个街道中所有房屋的房价总和是多少——但是很不幸的,游戏本身并不提供这样的计算.不过这难

hiho#1080 更为复杂的买卖房屋姿势 线段树+区间更新

#1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们可以化身上帝模式,买卖房产. 在这个游戏里,会不断的发生如下两种事件:一种是房屋自发的涨价或者降价,而另一种是政府有关部门针对房价的硬性调控.房价的变化自然影响到小Hi和小Ho的决策,所以他们希望能够知道任意时刻某个街道中所有房屋的房价总和是多少——但是很不幸的,游戏本身并不提供这样的计算.不过这难

线段树复习

#1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,"模拟都市"是他们非常喜欢的一个游戏,在这个游戏里面他们可以化身上帝模式,买卖房产. 在这个游戏里,会不断的发生如下两种事件:一种是房屋自发的涨价或者降价,而另一种是政府有关部门针对房价的硬性调控.房价的变化自然影响到小Hi和小Ho的决策,所以他们希望能够知道任意时刻某个街道中所有房屋的房价总和是多少--但是很不幸的,游戏本身并不提供这样的计算

程序员们也该知道的事——“期权和股票”

本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/pfj9NLLuKYAfJJF84R9WAw 作者:Bugly 精神哥 导语 今年的双十一,腾讯18周年司庆,小马哥宣布给2万7千员工每人发放300股腾讯股票,引发了朋友圈各种刷屏,最近第一批受限股票解禁了,精神哥得到了100股,有幸成为了腾讯的股东,不知道下次开股东大会的时候,会不会被邀请参加,哈哈. 其实很多开发同学,包括这次被授权的腾讯的小伙伴们

黑科技玩出跨界营销新姿势,泡单词携手百果园深化品牌影响力

1月10日起,广州.佛山.珠海三地的百果园门店,被家长群体给包了场.原因只是其和泡单词联手推出特惠活动,买水果就送科技感十足的AR互动绘本. 一个黑科技就能搅动无数家长的心?没这么简单. 又一次跨界营销?关键在于实现场景及流量互通 据悉,百果园和泡单词都是第一次尝试跨界营销. 一个生鲜.一个教育,从线下到线上,这样的一次活动完全是一场标准的互联网+状态下的跨界营销,亦是近期营销领域从饥饿营销.参与感营销等老套路中跳脱出来,形成的主流营销模式. 就在此前的2016年圣诞节,一嗨租车就和NBA进行过

内网劫持渗透新姿势:MITMf简要指南

声明:本文具有一定攻击性,仅作为技术交流和安全教学之用,不要用在除了搭建环境之外的环境. 0×01 题记 又是一年十月一,想到小伙伴们都纷纷出门旅游,皆有美酒佳人相伴,想到这里,不禁潸然泪下.子曰:"长得丑就要多读书!"于是有了这篇文章. 0×02 简要介绍 这篇文章的主要目的是介绍一下一个最新的中间人攻击测试框架 – MITMf.工具的作者是byt3bl33d3r,是基于代理工具sergio-proxy修改而来.这里是工具的地址: https://github.com/byt3bl3

专家回应任志强质疑:中国空置近5000万套房屋

专家回应任志强质疑:中国空置近5000万套房屋 宏观经济第一财经日报[微博]2014-10-27 02:02 我要分享 93 李秀中 中国官方并不发布空置房数据,而西南财经大学的一项数据引发了巨大争论.这场关乎中国经济关键数据的争议还在继续,日前,西南财大方面做出了进一步解释. 今年上半年,西南财大中国家庭金融调查与研究中心发布报告称,2013年,我国城镇住宅市场的整体空置率达到22.4%,城镇空置房为4898万套.对此,华远地产原董事长任志强(微博)称此绝不可能.争议由此发酵. 西南财大中国家

学会用各种姿势备份MySQL数据库

学会用各种姿势备份MySQL数据库 大纲 前言 为什么需要备份数据? 数据的备份类型 MySQL备份数据的方式 备份需要考虑的问题 设计合适的备份策略 使用cp进行备份 使用mysqldump+复制BINARY LOG备份 使用lvm2快照备份数据 使用Xtrabackup备份 前言 我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可以维修或者换新, 软件问题可以修复或重新安装, 但是如果数据没了呢?这可能是最恐怖的事情了吧, 我感觉在生产环境中应该没有什么比数据跟更为重要.

[读书笔记]重来,更为简单有效的商业思维

为什么会这样?与企业成长和业务有何关联?为什么人们总把扩张当做奋斗目标?除了满足虚荣心外,"大"还有什么好处?(你最好能给我一个比"规模经济"更好的答案.)选择并保持合适的规模又有何不妥? 小公司并不只是一块跳板.小公司本身就是一个伟大的目标. 不要因为瞄准小公司就觉得缺乏安全感.无论是谁,只要他所运营的公司能够持续发展.保持盈利,不管规模大小,都是值得骄傲的. 工作狂的行为不但没有必要,而且愚蠢至极.过多的工作并不代表你对项目更关注,也不代表你作了更多贡献,这仅仅