传送门
类似题:题目链接
题目:

Keven 特别喜欢线段树,他给你一个长度为 n 的序列,对序列进行 m 次操作。

操作有两种:

1 l r k :表示将下标在 [l , r][l,r] 区间内的数字替换成 [k,k+1,…,k+r-l][k,k+1,…,k+r−l]

2 l r :表示查询区间 [l , r][l,r] 的区间和

思路:题目已暗示线段树,对于每段区间更改可以 O(1) 求出区间和,考虑重复更新的话我们只需要通过lazy标记来记录当前区间最左边值,最后同时维护一下前缀和

#include <bits/stdc++.h>
#define ll long long
#define pii pair<double,double>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;const int MOD=433494437;
const int maxn=2e5+10;ll ma[maxn];
ll lazy[maxn<<2],sum[maxn<<2];void build(int l,int r,int rt)
{if(l==r){sum[rt]=ma[l];lazy[rt]=0;return ;}int mid=(l+r)>>1;build(l,mid,2*rt);build(mid+1,r,2*rt+1);sum[rt]=sum[2*rt]+sum[2*rt+1];
}void pushdown(int l,int r,int rt)
{int mid=(l+r)>>1;if(lazy[rt]!=0){lazy[2*rt]=lazy[rt];lazy[2*rt+1]=lazy[rt]+(mid+1-l);sum[2*rt]=(ll)(mid-l+1)*(lazy[2*rt]+lazy[2*rt]+mid-l)/2;sum[2*rt+1]=(ll)(r-mid)*(lazy[2*rt+1]+lazy[2*rt+1]+r-mid-1)/2;lazy[rt]=0;}
}void update(int L,int R,int l,int r,int rt,int add)
{if(L<=l&&R>=r){sum[rt]=(ll)(r-l+1)*(add+l-L+add+r-L)/2;lazy[rt]=add+l-L;return ;}int mid=(l+r)>>1;pushdown(l,r,rt);if(L<=mid){update(L,R,l,mid,2*rt,add);}if(R>mid){update(L,R,mid+1,r,2*rt+1,add);}sum[rt]=sum[2*rt]+sum[2*rt+1];
}ll query(int L,int R,int l,int r,int rt)
{if(L<=l&&R>=r){return sum[rt];}int mid=(l+r)>>1;pushdown(l,r,rt);ll ans=0;if(L<=mid){ans+=query(L,R,l,mid,2*rt);}if(R>mid){ans+=query(L,R,mid+1,r,2*rt+1);}return ans;
}int main()
{int n,m;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&ma[i]);}build(1,n,1);int a,b,c,d;while(m--){scanf("%d",&a);if(a==1){scanf("%d%d%d",&b,&c,&d);update(b,c,1,n,1,d);}else{scanf("%d%d",&b,&c);printf("%lld\n",query(b,c,1,n,1));}}return 0;
}

牛客小白月赛 20 E区区区间(线段树)相关推荐

  1. 牛客小白月赛20 E.区区区间

    牛客小白月赛20 E.区区区间 题目描述 Keven 特别喜欢线段树,他给你一个长度为 n 的序列,对序列进行m 次操作. (略) 输入描述: 第一行两个整数 n.m,表示序列的长度和操作次数(1&l ...

  2. 牛客小白月赛20 D.3的倍数

    牛客小白月赛20 D.3的倍数 题目描述 给你 n 个字符串,每个字符串最多包含 A - Z 这26个字母,Keven 现在取了一些字符串,发现每个字母出现的次数都是 3 的倍数,Keven 现在想要 ...

  3. 牛客小白月赛5 I.区间 (interval)

    牛客小白月赛5 I.区间 (interval) 题目链接 题目描述 Apojacsleam喜欢数组.他现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次操作:操作一:将a[L]-a[R]内 ...

  4. 牛客小白月赛58 B(暴力)C(思维)D(dp滚动数组优化)

    牛客小白月赛58 感觉没什么意思,这场月赛出题人有点问题. B 题意:给定一定的数据填充顺序和每一个填充层的名称,只有填充满了上一层才可以填充下一层. 但是每一层又属于某一个大层,一个大层中包含了若干 ...

  5. 牛客小白月赛4 D.郊区春游

    牛客小白月赛4 D.郊区春游 题目链接 题目描述 今天春天铁子的班上组织了一场春游,在铁子的城市里有 nnn 个郊区和 mmm 条无向道路,第 iii 条道路连接郊区 AiA_iAi​ 和 BiB_i ...

  6. 牛客小白月赛23(A、B

    牛客小白月赛 A.膜法记录 题意: 给n行m列的矩阵,矩阵中的每个位置都可能有敌人 现在你能消灭a行和b列的敌人,问是否有可能将所有敌人都消灭. 数据范围:n<=20,m<=1e5 思路: ...

  7. 牛客小白月赛2 B.小马过河

    牛客小白月赛2 B.小马过河 题目链接 题目描述 E t e ˊ r e o \mathrm{Et\acute{e}reo} Eteˊreo 开始涉猎几何领域了.他现在正在研究小马喝水问题. 众所周知 ...

  8. 牛客小白月赛28 E-会当凌绝顶,一览众山小 线段树+二分暴力模拟

    牛客小白月赛28 E-会当凌绝顶,一览众山小 线段树+二分暴力模拟 题意 思路 Code 传送门: https://ac.nowcoder.com/acm/contest/16081/E 题意 登山顺 ...

  9. F-选座椅_牛客小白月赛61 (nowcoder.com) 双指针,差分,2021济南ICPC- K Search For Mafuyu (pintia.cn) dfs

    F-选座椅_牛客小白月赛61 (nowcoder.com) 双指针,差分 如果区间[l,r]满足所有条件,那么包含[l,r]的区间也一定是满足条件的,那就考虑双指针遍历每一个区间,如果当前区间满足条件 ...

最新文章

  1. python基础第三章选择结构答案-Python days03-选择结构【if】
  2. 【NLP机器学习基础】从线性回归和Logistic回归开始
  3. kafka 可视化工具_两小时带你轻松实战SpringBoot+kafka+ELK分布式日志收集
  4. 7-181 帅到没朋友 (20 分)
  5. Git/Git-flow使用心得
  6. 前后端混合开发模式和前后端分离开发模式
  7. cmd编译java代码
  8. 一、部署虚拟环境来安装Linux系统
  9. [经典好文] 谈笑色影间,人生本无忌 (转于色影无忌)
  10. oracle mysql 中文排序规则_Oracle 对汉字的order by排序规则
  11. Latex PDF文档目录乱码
  12. C++面向对象程序设计:银行储蓄管理系统
  13. webpackjsonp 还原_EST:微生物介导下砷还原及其在铁氧化物上吸附/解吸耦合反应动力学模型...
  14. 【论文阅读】TimbreTron : A WaveNet (Cycle GAN(CQT(audio ))) pipeline for musical timbre transfer
  15. 产品如何取得WFA的WiFi认证(一)总览
  16. 如何分类保存下载京东商城无官方水印商品主图
  17. zapewnia stale poprawiając relacje związane
  18. WPF触控程序开发(三)——类似IPhone相册的反弹效果
  19. usb3.0传输速度测试软件,USB3.0与USB2.0的传输速度对比测试
  20. 大数据报告|70%的中国人过劳死危险,其中有你吗?

热门文章

  1. google学术搜索如何限定(或者指定)期刊?
  2. 京东科技寒假实习前端一面面经
  3. 关于汇编 BX 和 BLX 跳转指令
  4. jdk-6u11-linux-i586-rpm
  5. 【社会网络分析_04】ucinet中心度密度测量与凝聚子群发现
  6. 管理大师明茨伯格:成功的领导者是什么样的?
  7. 中国石油大学《政治学原理》第一次在线作业
  8. 【机器学习】决策树原理、调参、可视化 + 银行信用卡欺诈检测案例(含数据集)
  9. VS2019 无法打开文件“kernel32.lib”
  10. 最近看到一个故事,你让我妻守空房,我让你妻哭断肠