hiho1080 更为复杂的买卖房屋姿势
题目链接:
题解思路:
题目中对区间改动有两个操作:
0 区间全部点添加v
1 区间全部点改为v
easy想到应该使用到两个懒惰标记 一个记录替换 一个记录增减
但这里会涉及到一个顺序问题 ,这里就须要考虑到 懒惰标记传递的策略:
假设出现替换标记 就应该把增减标记覆盖
假设同区间出现多个增减标记 则须要将标记叠加
代码:
#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;
}
hiho1080 更为复杂的买卖房屋姿势的更多相关文章
- hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新
#1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...
- hiho#1080 更为复杂的买卖房屋姿势 线段树+区间更新
#1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...
- HihoCoder1080 更为复杂的买卖房屋姿势(线段树+多重lazy)
描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们可以化身上帝模式,买卖房产. 在这个游戏里,会不断的发生如下两种事件:一种是房屋自发的涨价或者降价,而另一种是政 ...
- hihoCoder #1080 : 更为复杂的买卖房屋姿势 (线段树,多tag)
题意: 有编号为0~n的n+1个房屋,给出每个房屋的起始价格,随后给出m种修改,每次修改都要进行输出所有房屋的价格总和.修改有两种方式:(1)政府调控,编号L~R全置为同一价格(0)房屋自行涨跌,编号 ...
- hihocoder1080 更为复杂的买卖房屋姿势
思路: 线段树区间修改,需要使用两个懒标记set和add.处理好两个标记的优先级即可(set之前的set和add是没有作用的). 实现: #include <bits/stdc++.h> ...
- 【腾讯Bugly干货分享】程序员们也该知道的事——“期权和股票”
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/pfj9NLLuKYAfJJF84R9WAw 作者:B ...
- 代理模式 PROXY Surrogate 结构型 设计模式(十四)
代理模式 PROXY 别名Surrogate 意图 为其他的对象提供一种代理以控制对这个对象的访问. 代理模式含义比较清晰,就是中间人,中介公司,经纪人... 在计算机程序中,代理就表示一个客户端不想 ...
- 内网劫持渗透新姿势:MITMf简要指南
声明:本文具有一定攻击性,仅作为技术交流和安全教学之用,不要用在除了搭建环境之外的环境. 0×01 题记 又是一年十月一,想到小伙伴们都纷纷出门旅游,皆有美酒佳人相伴,想到这里,不禁潸然泪下.子曰:& ...
- Android 线程的正确使用姿势
进程优先级(Process Priority) 线程寄宿在进程当中,线程的生命周期直接被进程所影响,而进程的存活又和其优先级直接相关.在处理进程优先级的时候,大部分人靠直觉都能知道前台进程(Foreg ...
随机推荐
- 陕西师范大学第七届程序设计竞赛网络同步赛D ZQ的睡前故事【约瑟夫环1-N数到第k个出队,输出出队顺序/ STL模拟】
链接:https://www.nowcoder.com/acm/contest/121/D来源:牛客网 题目描述 ZQ是一个拥有n女朋友的万人迷,她的每一个女朋友每天晚上都会挨个给他打电话,要他讲了睡 ...
- Python的网络编程[1] -> FTP 协议[0] -> FTP 的基本理论
FTP协议 / FTP Protocol FTP全称为File Transfer Protocol(文件传输协议),常用于Internet上控制文件的双向传输,常用的操作有上传和下载.基于TCP/IP ...
- 安装mysql数据库图文教程
一.首先下载该版本的Mysql 5.5.28双击软件,弹出软件的安装界面如下 二.点击Next ,点击同意
- Xamarin XAML语言教程使用属性设置进度条的当前进度
Xamarin XAML语言教程使用属性设置进度条的当前进度 在图12.19~12.21中我们看到的是没有实现加载的进度条,即进度条的当前进度为0,如果开发者想要修改当前进度,可以使用两种方式:一种是 ...
- Java多线程中的异常处理
在java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉.这一点是通过java.lang.Run ...
- 【拓扑排序topsort】【p1226】神经网络
描述 Description 神经网络就是一张有向图,图中的节点称为神经元,而且两个神经元之间至多有一条边相连,下图是一个神经元的例子: 神经元[编号为1) 图中,X1—X3是信息输入渠道,Y1-Y2 ...
- List和ArrayList的区别和联系
1. List是一个接口,而ArrayList是List接口的一个实现类. ArrayList类继承并实现了List接口. 因此,List接口不能被构造,也就是我们说的不能创建实例对象,但是我们 ...
- js中typeof的用法汇总
- 谈谈 ES7、ES8、ES9 和 Stage 3 的那些事儿
ES6 作为多年来 JavaScript 的重大版本变革,受到 JavaScript 开发者们的普遍欢迎. 也正是从 ES6 (ES2015) 开始,JavaScript 版本发布变为年更,即每年发布 ...
- django前后端数据传输学习记录
在开发过程中会遇到这样的情况 后台返回了一堆的数据,是一个列表 例如 datas = [{"a":1, "b":2}, {"c": 3,&q ...