博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hiho1080 更为复杂的买卖房屋姿势
阅读量:5170 次
发布时间:2019-06-13

本文共 1603 字,大约阅读时间需要 5 分钟。

题目链接:

题解思路:

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

0   区间全部点添加v

1   区间全部点改为v

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

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

假设出现替换标记 就应该把增减标记覆盖

假设同区间出现多个增减标记 则须要将标记叠加

代码:

#include
#include
#include
#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define maxn 100050using 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; }

转载于:https://www.cnblogs.com/llguanli/p/6812793.html

你可能感兴趣的文章
CodeForces Round #295 Div.2
查看>>
项目经理在项目各阶段的工作重点-更新版
查看>>
数据库链接池c3p0配置踩坑
查看>>
Java多线程和并发(一),进程与线程的区别
查看>>
使用xftp无法连接阿里云服务器 或者linux
查看>>
js高级(部分)
查看>>
【BZOJ4566】[Haoi2016]找相同字符 后缀数组+单调栈
查看>>
【BZOJ4200】[Noi2015]小园丁与老司机 DP+最小流
查看>>
【BZOJ2959】长跑 LCT+并查集
查看>>
python之MD5加密
查看>>
Elasticsearch-sql 用SQL查询Elasticsearch
查看>>
HTML超连接(a标记)
查看>>
servlet学习笔记_2
查看>>
cf(415 A,B)
查看>>
linux压缩和解压缩命令大全
查看>>
Sublime text 3 注册码激活码 版本号3143
查看>>
通过wifi无法连接手机调试
查看>>
HD 2177(威佐夫博弈 入门)
查看>>
挑战多重部分和问题
查看>>
前端开发 —— js 常用工具函数(utilities)
查看>>