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 ...
随机推荐
- MSSQL 让排序更方便灵活
SQL: SELECT * FROM table1 ORDER BY CASE WHEN field=value THEN 1 ELSE 0 END (ASC/DESC) 是不是很方便呢,哈哈
- 【转】2017PHP程序员的进阶之路
2017PHP程序员的进阶之路 又是一年毕业季,可能会有好多毕业生即将进入开发这个圈子,踏上码农这个不归路.根据这些年在开发圈子总结的LNMP程序猿发展轨迹,结合个人经验体会,总结出很多程序员对未来的 ...
- Spring:基于配置文件的创建对象的各种方式
在Spring3.0之前,Spring主要创建对象的方法是基于配置文件的,即在配置文件中为对象进行注册,并且可以在配置文件当中为对象的字段或者称之为属性值进行赋值,接下来首先介绍基于配置文件的创建对象 ...
- 原来是adblock惹的祸
一个在本地开发好的网站,放到服务器就不行了.花了好几个小时的时间,最后试着把adblock关了,然后正常了.
- codeforces-103B
题目连接:http://codeforces.com/contest/103/problem/B B. Cthulhu time limit per test 2 seconds memory lim ...
- Python的程序结构[1] -> 方法/Method[2] -> 魔术方法 __init__ / __del__ / __new__
魔术方法 / Magic Method 魔法方法就是可以给你的类增加魔力的特殊方法(实质应称为特殊方法,魔术方法在JavaScript中有所体现,对象具有不透明特性,而且无法在自定义对象中模拟这些行为 ...
- python 字符串最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow&qu ...
- Codeforces 825E - Minimal Labels
825E - Minimal Labels 题意 给出 m 条有向边,组成有向无环图,输出一个 1 到 n 组成的排列,每个数只能出现一次,表示每个点的标号.如果有边 \((u, v)\) 那么 \( ...
- Flip Game -- LeetCode
You are playing the following Flip Game with your friend: Given a string that contains only these tw ...
- NIO入门之BIO
传统BIO编程 网络编程的基本模型是Client-Server模型,也就是两个进程之间相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的端口发起连接请求,通 ...