8.21T1 草莓蛋糕(拆max + 权值线段树)

news2025/1/12 23:32:27

http://cplusoj.com/d/senior/p/NODSX2302A

看到式子:在这里插入图片描述

我们就应该想到拆max

在这里插入图片描述

我们可以整理推出:

在这里插入图片描述

记:

在这里插入图片描述

在这里插入图片描述

L L L C C C,我们满足 h a ≤ h b h_a\le h_b hahb,找 c c c 的最小值

C C C L L L 同理。

我们直接拿权值线段树实现就行

但是叶子节点有很多信息,怎么维护?

直接multiset即可!

权值线段树要提前离散化一下,就不用动态开点了

#include<bits/stdc++.h>
using namespace std;
#ifdef LOCAL
 #define debug(...) fprintf(stdout, ##__VA_ARGS__)
 #define debag(...) fprintf(stderr, ##__VA_ARGS__)
#else
 #define debug(...) void(0)
 #define debag(...) void(0)
#endif
//#define int unsigned int
inline int read(){int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;
ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+
(x<<3)+(ch^48);ch=getchar();}return x*f;}
#define Z(x) (x)*(x)
#define pb push_back
#define fi first
#define se second
//#define M
//#define mo
#define N 4000010
int n, m, i, j, k, T, len[2];
int ans[N], ls[N], rs[N], mn[N][2][2], tot, tye; 
multiset<int>s1[1000010][2], s2[1000010][2];  
map<int, int>mp; 

void Set(int k) {
	ans[k] = mn[k][0][0] = mn[k][1][0] = mn[k][0][1] = mn[k][1][1] = 2e9; 
}

struct Segment_tree {
	void push_up(int k) {
		long long sss = ans[k]; 
		sss = min(ans[ls[k]], ans[rs[k]]); 
		sss = min(sss, (long long)mn[rs[k]][0][0] + (long long)mn[ls[k]][1][0]); 
		sss = min(sss, (long long)mn[rs[k]][1][1] + (long long)mn[ls[k]][0][1]); 
//		debug("%lld\n", sss); 
		ans[k] = sss; 
		mn[k][0][0] = min(mn[ls[k]][0][0], mn[rs[k]][0][0]); 
		mn[k][0][1] = min(mn[ls[k]][0][1], mn[rs[k]][0][1]); 
		mn[k][1][0] = min(mn[ls[k]][1][0], mn[rs[k]][1][0]); 
		mn[k][1][1] = min(mn[ls[k]][1][1], mn[rs[k]][1][1]); 
	}
	void add(int &k, int l, int r, int o, int h, int x, int y, int d) {
		if(!k) k = ++tot, Set(k); 
		if(l == r) {
			if(!mp[k]) mp[k] = ++tye; int i = mp[k]; ans[k] = 2e9; 
			if(d == 0) s1[i][o].erase(x), s2[i][o].erase(y); 
			else s1[i][o].insert(x), s2[i][o].insert(y); 
			if(!s1[i][o].empty()) mn[k][o][0] = *s1[i][o].begin(); else mn[k][o][0] = 2e9; 
			if(!s2[i][o].empty()) mn[k][o][1] = *s2[i][o].begin(); else mn[k][o][1] = 2e9; 
			if(!s1[i][0].empty() && !s1[i][1].empty()) ans[k] = min(ans[k], *s1[i][0].begin() + *s1[i][1].begin()); 
			if(!s2[i][0].empty() && !s2[i][1].empty()) ans[k] = min(ans[k], *s2[i][0].begin() + *s2[i][1].begin()); 
//			debug("[%d](%d %d)\n", h, mn[k][o][0], mn[k][o][1]); 
//			debug("%d\n", k); 
			return ; 
		}
		int mid = (l + r) >> 1; 
		if(h <= mid) add(ls[k], l, mid, o, h, x, y, d); 
		else add(rs[k], mid + 1, r, o, h, x, y, d); 
//		debug("For %d : ")
		push_up(k); 
	}
}Seg;

int a[N]; 
struct node {
	int o, d, x, y, h; 
}E[N];
//vector<node>E; 

signed main()
{
	#ifdef LOCAL
	  freopen("in.txt", "r", stdin);
	  freopen("out.txt", "w", stdout);
	#endif
//	srand(time(NULL));
//	T=read();
//	while(T--) {
//
//	}
	int q, o, d, x, y, h, rt = 0; 
	q = read(); Set(0); 
	for(i = 1; i <= q; ++i) {
		o = read(); d = read(); x = read(); y = read(); 
		a[i] = h = (d ? y - x : x - y); 
		E[i] = {o, d, x, y, h}; 
	}
	sort(a + 1, a + q + 1); //, [] (node x, node y) { return x.h < y.h; }); 
	for(i = 1; i <= q; ++i) {
		assert(x <= 1e9); 
		assert(y <= 1e9); 
		o = E[i].o; d = E[i].d; x = E[i].x; y = E[i].y; h = E[i].h; 
		h = lower_bound(a + 1, a + q + 1, h) - a; 
		Seg.add(rt, 1, q, d, h, x, y, o); 
		len[d] += (o ? 1 : -1); 
		if(!len[0] || !len[1]) { printf("-1\n"); continue; }
		printf("%d\n", ans[rt]); 
	}
	return 0;	
}



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

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

相关文章

05、Redis实战:优惠券秒杀、全局唯一ID、超买乐观悲观锁、一人一单逻辑、分布式锁、分布式锁的原子性

3、优惠卷秒杀 3.1 -全局唯一ID 每个店铺都可以发布优惠券&#xff1a; 当用户抢购时&#xff0c;就会生成订单并保存到tb_voucher_order这张表中&#xff0c;而订单表如果使用数据库自增ID就存在一些问题&#xff1a; id的规律性太明显受单表数据量的限制 场景分析&#x…

第2章-02-网页中的Document元素

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲,后续完整更新内容如下。 文章…

2024思维导图工具评测:性能、易用性全面对比

现在工作日常要处理的数据纷繁复杂&#xff0c;如何高效地组织、理解和记忆这些信息&#xff0c;成为了每个人都需要面对的挑战。不知道你有没有尝试过使用思维导图软件呢&#xff1f;这次我们看看它们是如何帮助我们优化思维、提升效率的。 1.福晰思维导图 链接一下&#xf…

数据结构day04(队列 Queue 循环队列、链式队列)

目录 【1】队列 Queue 1》 队列的定义 2》循环队列 3》链式队列 【1】队列 Queue 1》 队列的定义 队列&#xff08;queue&#xff09;是只允许在一端进行插入操作&#xff0c;而在另一端进行删除操作的线性表。 队列是一种先进先出&#xff08;First In First Out&#xf…

Day23 第十站 文件IO的多路复用

#include <myhead.h>void insert_client(int *client_arr,int *len,int client) {//client_arr[n]{3,4} len&client_count,client_count2;//添加 5 client_arr[2(*len)]5(client)client_arr[*len]client;(*len); } int find_client(int *client_arr,int len,int clie…

Spring DI 数据类型—— set 方法注入

首先新建项目&#xff0c;可参考 初识IDEA、模拟三层--控制层、业务层和数据访问层 一、spring 环境搭建 &#xff08;一&#xff09;pom.xml 导相关坐标 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.or…

代码随想录算法训练营第二十二天| 77. 组合 216.组合总和III 17.电话号码的字母组合

77. 组合 题目&#xff1a; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2&#xff1a…

VAuditDemo安装漏洞

目录 VAuditDemo安装漏洞 index.php header.php config.php lib.php install.php 分析结果 漏洞利用 第一步&#xff1a;删除install.lock文件&#xff0c;访问 install.php 抓包 第二步&#xff1a;通过审计构造payload 第三步&#xff1a;修改抓包请求内容&#x…

客户分级管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示为什么选择我官方认证闲鱼玩家&#xff0c;服务很多代码文档&#xff0c;百分百好评&#xff0c;战绩可查&#xff01;&#xff01;入职于互联网大厂&#xff0c;可以交流&#xff0c;共同进步。有保障的售后 代码参考数据库参考源码获取…

《python语言程序设计》2018版第7章第10题设计一个名为time的类,包括hour minute second

#main代码段 def main():a int(time.time())total_second int(a)current_second total_second % 60total_minutes total_second // 60current_minute total_minutes % 60total_hours total_minutes // 60current_hour total_hours % 24b exCode07.Time(current_hour,cu…

SpringBoot中生成二维码的案例实战

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

基于数据复杂度的数据库选型

数据模型的选择对于 IT 系统的开发至关重要&#xff0c;它不仅决定了数据存储和处理的方式&#xff0c;影响系统的性能、扩展性以及维护性等。本质上来说&#xff0c;不同的数据模型反映了我们对业务问题的不同思考和抽象程度。 今天我们从不同数据模型对于复杂数据和关系的支…

定制化三防平板:为专业领域打造的坚固解决方案

在科技时代&#xff0c;移动设备已经成为各行各业不可或缺的工具。然而&#xff0c;对于一些特殊行业&#xff0c;如军事、野外勘探、物流、医疗和制造业等&#xff0c;普通商用平板往往无法满足其严苛的工作环境需求。三防平板&#xff0c;以其卓越的防护性能和高度的定制化能…

有了这4款工具,你就知道电脑怎么录屏了!

电脑屏幕录屏这个问题很多人都会碰到&#xff0c;比如教学视频录制&#xff0c;游戏技巧分享&#xff0c;软件操作演示等等。因为场景众多&#xff0c;电脑自带的录屏功能不一定能满足&#xff0c;所以借助第三方工具是一个很有效的办法。如果大家不知道如何录屏&#xff0c;可…

网络安全-安全策略初认识

文章目录 前言理论介绍1. 安全策略1.1 定义&#xff1a;1.2 关键术语&#xff1a; 2. 防火墙状态监测 实战步骤1&#xff1a;实验环境搭建步骤2&#xff1a;配置实现 总结1. 默认安全策略2. 自定义安全策略3. 防火墙状态会话表 前言 who&#xff1a;本文主要写给入门防火墙的技…

【Vue3】集成 Ant Design Vue

【Vue3】集成 Ant Design Vue 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗…

SX_gitlab可视化操作c语言知识_17

gitlab可视化操作技巧: Merge into current branch直接将远程wjc_GNSS分支的数据拉下来同步到本机当前的分支代码&#xff0c;执行的是合并操作&#xff0c;即多的模块会添加到本地分支&#xff0c;有冲突的地方不行得rebase覆盖才行 修改完代码先暂存更改再在暂存区写入备注&a…

特斯拉FSD硬件进化

特斯拉FSD硬件进化 历经十年&#xff0c;特斯拉自动驾驶软硬件系统不断进化。硬件&#xff1a;HW1.0 到 HW4.0&#xff0c;自研比例与配置性能不断提升。 2013 年&#xff0c;马斯克于推特披露特斯拉正在进行辅助驾驶系统 AP&#xff08;Autopilot System&#xff09;的研发&…

鸿蒙(API 12 Beta3版)【使用ImageSource完成图片解码】图片开发指导

图片解码指将所支持格式的存档图片解码成统一的[PixelMap]&#xff0c;以便在应用或系统中进行图片显示或[图片处理]。当前支持的存档图片格式包括JPEG、PNG、GIF、WebP、BMP、SVG、ICO、DNG。 开发步骤 全局导入Image模块。 import { image } from kit.ImageKit;获取图片。…

Compose知识分享

前言 “Jetpack Compose 是一个适用于 Android 的新式声明性界面工具包。Compose 提供声明性 API&#xff0c;让您可在不以命令方式改变前端视图的情况下呈现应用界面&#xff0c;从而使编写和维护应用界面变得更加容易。” 以上是Compose官网中对于Compose这套全新的Androi…