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 ...
随机推荐
- BZOJ1588 [HNOI2002]营业额统计 splay模板
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 16189 Solved: 6482 [Submit][S ...
- React Native解决Android的WebView无法执行injectedJavaScript代码
需求 在用WebView组件写一个东西,要求功能:打开web后进行js代码注入. 开发 代码很简单,示例: const js = ` alert(1); alert(2); `; <WebVie ...
- 华农oj Problem B: Averyboy找密码【STL】
Problem B: Averyboy找密码 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 83 Solved: 29 [Submit][Status] ...
- MySql笔记之修改数据库编码
修改前(系统默认编码) 查看编码命令: show variables like '%char%'; show variables like 'character%'; 两种方法 a) 暂时性修改 SE ...
- spring jpa data笔记
tomcat启动Maven项目的时候总抛出这样的错误: Error creating bean with name 'org.springframework.boot.autoconfigure.or ...
- Hibernate使用Criteria去重distinct+分页
写在前面: 最近在项目中使用了Criteria的分页查询,当查询的数据没有重复的记录还好,但是当数据有关联并出现重复记录的时候,就要去重,那么就会出现查询的记录数与实际的不一致的问题.这里也记录一下解 ...
- linux-shell父子进程
用户登录到Linux系统后,系统将启动一个用户shell.在这个shell中,可以使用shell命令声明变量,也可以创建并运行 shell脚本程序.运行shell脚本程序时,系统将创建一个 ...
- rs485
rs485 编辑 智能仪表是随着80年代初单片机技术的成熟而发展起来的,现在世界仪表市场基本被智能仪表所垄断.究其原因就是企业信息化的需要,企业在仪表选型时其中的一个必要条件就是要具有联网通信接口.最 ...
- delphi crc校验函数
function CalCRC16(AData: array of Byte; AStart, AEnd: Integer): string;const GENP=$8408; //多项式公式X1 ...
- Javascript中的原型链、prototype、__proto__的关系
javascript 2016-10-06 1120 9 上图是本宝宝用Illustrator制作的可视化信息图,希望能帮你理清Javascript对象与__proto__.prototype和 ...