【*2400 线段树】CF444 C

news2024/11/28 0:49:10

Problem - C - Codeforces

题意:

思路:

首先询问的是权值和,那么维护一个区间和sum,因此pushup部分就好了

考虑修改,区间修改,因此要打标记

一次修改对区间和的贡献不能直接计算,因此我们考虑分开计算贡献,把这个区间分成几个由一种颜色构成的区间,对这些区间去产生贡献

如果一个区间的左右子区间颜色不一样,那么就继续递归下去算贡献

lazy标记的含义是,给这整个区间的颜色赋值为y,那么对区间和的贡献就是abs(x-y),x为原来的颜色

在设计lazy标记的含义时,考虑区间修改对val的贡献

然后我们去考虑如何pushdown

在pushdown时,先去更新左右子区间的标记,然后去更新左右子区间的val,最后清空该区间的tag

在计算左右子区间的val时,记得用整个区间的tag去计算,为什么呢

在pushdown时,tag永远是为了子区间服务的,在计算本区间的val时不能用本区间的tag

那么对于这道题的pushdown:

更新标记:直接累加即可

更新val:和区间和同理

清空tag:lazy=0

区间修改和查询的代码就不详细解释了,都是一样的

Code:

#include <bits/stdc++.h>

#define int long long

using namespace std;

const int mxn=1e5+10;
const int mxe=1e5+10;
const int mod=1e9+7;
const int Inf=1e18;

struct tag{
	int laz=0;
};

struct info{
	int sum=0,col=0,same=0,sz=0;
	tag t;
};

info operator+(const info &l,const info &r){
	info res;

	res.sz=l.sz+r.sz;

	res.sum=l.sum+r.sum;

	res.col=0;
	res.same=0;

	if(l.same==1&&r.same==1&&l.col==r.col){
		res.same=1;
		res.col=l.col;
	}

	return res;
}

struct Segtree{
	info Val;
}tree[mxe<<2];

int N,M,op,l,r,x;
int col[mxn],a[mxn];

void pushup(int rt){
	tree[rt].Val=tree[rt<<1].Val+tree[rt<<1|1].Val;
}
void pushdown(int rt){
	if(tree[rt].Val.t.laz!=0){
		//左区间
		tree[rt<<1].Val.t.laz+=tree[rt].Val.t.laz;
		tree[rt<<1].Val.col=tree[rt].Val.col;
		tree[rt<<1].Val.sum+=tree[rt<<1].Val.sz*tree[rt].Val.t.laz;

		//右区间
		tree[rt<<1|1].Val.t.laz+=tree[rt].Val.t.laz;
		tree[rt<<1|1].Val.col=tree[rt].Val.col;
		tree[rt<<1|1].Val.sum+=tree[rt<<1|1].Val.sz*tree[rt].Val.t.laz;

		//清空tag
		tree[rt].Val.t.laz=0;	
	}
}
void build(int rt,int l,int r){
	tree[rt].Val.t.laz=0;
	if(l==r){
		tree[rt].Val.sz=1;
		tree[rt].Val.col=col[l];
		tree[rt].Val.same=1;
		tree[rt].Val.sum=0;
		return;
	}
	int mid=l+r>>1;
	build(rt<<1,l,mid);
	build(rt<<1|1,mid+1,r);
	pushup(rt);
}
info query(int rt,int l,int r,int x,int y){
	if(x<=l&&r<=y){
		return tree[rt].Val;
	}
	pushdown(rt);
	int mid=l+r>>1;
	if(x>mid) return query(rt<<1|1,mid+1,r,x,y);
	else if(y<=mid) return query(rt<<1,l,mid,x,y);
	else{
		return query(rt<<1,l,mid,x,y)+query(rt<<1|1,mid+1,r,x,y);
	}
}
void modify(int rt,int l,int r,int x,int y,int k){
	if(x<=l&&r<=y){
		if(tree[rt].Val.same==1){
			int p=tree[rt].Val.col;
			tree[rt].Val.t.laz+=abs(p-k);
			tree[rt].Val.col=k;
			tree[rt].Val.sum+=abs(p-k)*tree[rt].Val.sz;
			return;
		}
	}
	pushdown(rt);
	int mid=l+r>>1;
	if(x<=mid) modify(rt<<1,l,mid,x,y,k);
	if(y>mid) modify(rt<<1|1,mid+1,r,x,y,k);
	pushup(rt);
}
void solve(){
	cin>>N>>M;
	for(int i=1;i<=N;i++) col[i]=i;
	build(1,1,N);
	for(int i=1;i<=M;i++){
		cin>>op;
		if(op==1){
			cin>>l>>r>>x;
			modify(1,1,N,l,r,x);
		}else{
			cin>>l>>r;
			cout<<query(1,1,N,l,r).sum<<'\n';
		}
	}
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int __=1;//cin>>__;
    while(__--)solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/742094.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8-1、Deployment运行应用的机制

Kubernetes 通过各种 Controller 来管理 Pod 的生命周期。为了满足不同业务场景,Kubernetes 开发了 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 、 CronJob 等多种 Controller。 用户通过 kubectl 创建 Depl…

ENSP模拟器如何设置命令行和描述框的背景颜色及字体

ENSP模拟器如何设置命令行和描述框的背景颜色及字体 选择“菜单 > 工具 > 选项”&#xff0c; 在弹出界面中选择“字体设置”。 单击“字体”后的“选择”设置字体&#xff0c;单击“字体颜色”后的“选择”设置字颜色&#xff0c;单击“背景颜色”后的“选择”设置…

UnityVR--机械臂场景11-简单流水线应用3

目录 一. 前言 二. 设置一个定时器 三. 添加机械臂事件 四. 机械臂控制函数OnArmCtrl 五. 定义上面的3个机械臂移动方法 六. 机械臂各关节转动控制 七. 场景实现 八. 完整代码 一. 前言 上一篇使用了DoTween插件&#xff0c;并且改写了事件的相关参数&#xff0c;本篇…

jenkins 关闭关闭CSRF Protection(跨站请求伪造保护)

jenkins版本 我的jenkins版本是&#xff1a;2.332.4 背景 Jenkins版本自2.204.6以来的重大变更有&#xff1a;删除禁用 CSRF 保护的功能。 从较旧版本的 Jenkins 升级的实例将启用 CSRF 保护和设置默认的发行者&#xff0c;如果之前被禁用。 解决方法 老版本Jenkins的CSRF…

QT各种控件常用样式表qss示例

1、表格控件QTableWidget和QTableView 这个控件比较复杂&#xff0c;里面包含了滑动条、表头&#xff08;又细分为内容区/空白区&#xff09;、表格、整体、左上角按钮等多种不同的元素&#xff0c;他们之间有复杂的叠层关系。需要通过各种“选择器”来指定样式的作用范围。 …

解决openKylin显示不能自适应VMware窗口大小的教程

目录 前言解决步骤效果图 前言 相信很多朋友们使用VMware配置成功openKylin后对遇到不能全屏显示的问题很头痛&#xff0c;今天我用我自己的电脑为例&#xff0c;给大家示范一下。 网上对于虚拟机不能自适应VMware主要有两个方案 一个是编辑虚拟机设置----显示器----指定监…

如何用ChatGPT做咨询师,附Prompt

对基本问题研究得不深不透、得不到可靠的分析框架支持的情况下&#xff0c;仓促采取就事论事的应对措施 &#xff0c;由于未能触及事情的根本&#xff0c;往往非但不能获得预期的效果&#xff0c;相反可能引发新的矛盾。 ——吴敬琏&#xff08;著名经济学家&#xff0c;国务院…

【JavaEE初阶】JavaScript基础语法

摄影分享: 文章目录 1.初识JavaScript1.1JavaScript简介1.2JavaScript 和 HTML 和 CSS 之间的关系1.3JavaScript 运行过程1.4JavaScript 的组成 2.JS基础语法2.1在HTML中引入JS2.2第一个JS程序2.3变量2.4JS的内置类型2.4.1数字2.4.2字符串2.4.3布尔类型2.4.4undefined类型和nu…

821. 跳台阶

链接&#xff1a; 821. 跳台阶 - AcWing题库 题目&#xff1a; 一个楼梯共有 nn 级台阶&#xff0c;每次可以走一级或者两级&#xff0c;问从第 00 级台阶走到第 nn 级台阶一共有多少种方案。 输入格式 共一行&#xff0c;包含一个整数 nn。 输出格式 共一行&#xff0c;包含一…

性能测试:Jmeter压测过程中的短信验证码读取

目录 问题背景 解决思路 实现方法 1. 建立JDBC连接 2. 使用JDBC请求获取验证码 3. 使用正则将验证码提取并使用 问题背景 现如今国内的大部分软件或者网站应用&#xff0c;普遍流行使用短信业务&#xff0c;比如登录、注册以及特定的业务通知等。 对于这些业务&#xff…

1.Cesium介绍及环境配置

前言 鸽了半年&#xff0c;flag立的太多&#xff0c;稿子存了100多篇&#xff0c;都没有开始排版整理&#xff0c;这些天正好学习cesium&#xff0c;决定每天更新一篇&#xff0c;提提神&#xff01;&#x1f914;&#x1f632;&#x1f601; 一、Cesium简介 Cesium是一个用于显…

服务器该怎么预防勒索病毒

场景描述 随着互联网飞速发展&#xff0c;各企业不论大小基本都搭建了属于自己公司的服务器。例如文件服务器、代码服务器、业务系统服务器、数据库服务器等。虽然服务器种类各有不同&#xff0c;但共同点都在于&#xff1a;是公司重要的数据中心。一旦被勒索病毒侵占&#xf…

【二分查找】69. x 的平方根

69. x 的平方根 解题思路 使用二分查找注意 这里当计算的Mid在x的平方根附近之后&#xff0c;直接返回mid即可 class Solution {public int mySqrt(int x) {// 二分查找 查找区间 mid * mid xint left 0;int right x/ 2 1;int mid 0;if(x 0){return 0;}if(x 1){retur…

字符函数和字符串函数的模拟实现

求字符串长度 strlen 长度不受限制的字符串函数 strcpystrcmpstrcat长度受限制的字符串函数 strnlenstrncmpstrncpystrncat字符串查找 strstrstrtok错误信息报告 strerror内存操作函数 memcpymemmovememsetmemcmp 首先我们来看strlen字符串是以‘\0’为结束标志&#xff0c;str…

基于vant封装的动态表单(VFrom使用教程)

vant-ui是属于vue开发移动端中用的比较多的一个组件库了&#xff0c;网上基于它的一些组件的二次封装也数不胜数&#xff0c;但是却都是零零散散&#xff0c;不成体系。总不能用一个就去找类似的封装吧&#xff0c;这样拼凑起来的也不是我们想要的。尤其&#xff0c;涉及众多表…

Python单元测试

单元测试 测试可以保证你的代码在一系列给定条件下正常工作测试允许人们确保对代码的改动不会破坏现有的功能测试迫使人们在不寻常条件的情况下思考代码&#xff0c;这可能会揭示出逻辑错误良好的测试要求模块化&#xff0c;解耦代码&#xff0c;这是一个良好的系统设计的标志…

Oracle select 和read的权限

只有select权限&#xff0c;也可以for update锁表。 我懵了一下&#xff0c;不确认啊&#xff0c;我先测试了下&#xff0c;如下所示&#xff1a; create user test11 identified by test11; create user test12 identified by test12; grant connect,resource to test11,tes…

【2022HVV系列】蓝队手册更新版(建议收藏)

本文首发于【2022HVV系列】蓝队手册更新版&#xff08;建议收藏&#xff09; 综合篇 青藤云安全出品&#xff1a; 倒计时&#xff01;你需要这份《2022攻防演练蓝队防守指南》 攻防演练合集 | 3个阶段&#xff0c;4大要点&#xff0c;蓝队防守全流程纲要解读网络安全实战攻防…

[QT编程系列-1]:C++图形用户界面编程,QT框架快速入门培训 - 0- 总述

目录 导言 主要内容 附录&#xff1a; 导言 1. 在这里强调为啥选择 PPT 方式&#xff0c;而不是直接讲解代码 2. 重原理和方法 3. 种 QT 的框架和 QT 的开发流程 4. 轻 UI 界面美观&#xff08; UI 设计单独课程&#xff09; 5. 请代码具体实现&#xff08;后期自学&#xf…

JavaScript 导出csv文件页面卡死时的处理方式

文章概叙 当我在使用xlsx包导出csv文件时候&#xff0c;数据过大导致页面卡死&#xff0c;因此才使用blob的方式来导出csv文件&#xff0c;如果没有出现这个问题&#xff0c;建议还是使用xlsx包 XLSX包 npm的地址&#xff0c;对于前后端开发的同学来说&#xff0c;文档难度不…