【SSL_P2645】线段树练习题二

本文介绍了一种利用线段树数据结构解决盒子可见性问题的方法。在一个假设的场景中,多个不同颜色的盒子放置在一条线上,通过线段树的懒惰更新和查询操作,计算出从特定角度能看到的盒子数量。

线段树练习题二


Description

桌子上零散地放着若干个不同颜色的盒子,桌子的后方是一堵墙。如右图所示。问从桌子前方可以看到多少个盒子?假设人站得足够远(输入时,由底向上,从左到右)。
在这里插入图片描述

Sample Input

16
5
4 7
12 14
1 5
6 10
11 16

Sample Output

4

Hint

1<=n<=100000,1<=m<=100000,保证坐标范围为[1,n].

解题思路

这道题比起上一道题线段树练习题一没有太大的区别,也就 亿 点点而已

#include<iostream>
#include<cstdio>
using namespace std;
int n,m,tree[400010],ans,h[100010];
void in(int x,int l,int r,int a,int b,int t)
{
	if(tree[x]==t)return;
	int mid=(l+r)/2;
	if(l==a&&r==b)
	{
		tree[x]=t;
		return;
	}
	else
	{
		if(tree[x]>=0)
		{
			tree[x*2]=tree[x*2+1]=tree[x];
			tree[x]=-1;
		}
		if(b<=mid) in(x*2,l,mid,a,b,t);
		else if(a>=mid) in(x*2+1,mid,r,a,b,t);
		else
		{
			in(x*2,l,mid,a,mid,t);
			in(x*2+1,mid,r,mid,b,t);
		}
	} 
}
void hh(int x,int l,int r)
{
	int mid=(l+r)/2;
	if(tree[x]>0)
	{
		if(h[tree[x]]==0)
			ans++;
		h[tree[x]]=1;
		return;
	}
	if(r-l>1)
	{
		hh(x*2,l,mid);
		hh(x*2+1,mid,r);
	}
}
int main()
{
	cin>>m>>n;
	for(int i=1;i<=n;i++)
	{
		int l,r;
		scanf("%d%d",&l,&r);
		in(1,1,m,l,r,i);
	}
	hh(1,1,m);
	cout<<ans<<endl;
}
内容概要:本文详细介绍了一种基于Simulink的表贴式永磁同步电机(SPMSM)有限控制集模型预测电流控制(FCS-MPCC)仿真系统。通过构建PMSM数学模型、坐标变换、MPC控制器、SVPWM调制等模块,实现了对电机定子电流的高精度跟踪控制,具备快速动态响应和低稳态误差的特点。文中提供了完整的仿真建模步骤、关键参数设置、核心MATLAB函数代码及仿真结果分析,涵盖转速、电流、转矩和三相电流波形,验证了MPC控制策略在动态性能、稳态精度和抗负载扰动方面的优越性,并提出了参数自整定、加权代价函数、模型预测转矩控制和弱磁扩速等优化方向。; 适合人群:自动化、电气工程及其相关专业本科生、研究生,以及从事电机控制算法研究与仿真的工程技术人员;具备一定的电机原理、自动控制理论和Simulink仿真基础者更佳; 使用场景及目标:①用于永磁同步电机模型预测控制的教学演示、课程设计或毕业设计项目;②作为电机先进控制算法(如MPC、MPTC)的仿真验证平台;③支撑科研中对控制性能优化(如动态响应、抗干扰能力)的研究需求; 阅读建议:建议读者结合Simulink环境动手搭建模型,深入理解各模块间的信号流向与控制逻辑,重点掌握预测模型构建、代价函数设计与开关状态选择机制,并可通过修改电机参数或控制策略进行拓展实验,以增强实践与创新能力。
你提供的代码片段是使用 **mbed TLS**(一个轻量级、适合嵌入式系统的 SSL/TLS 加密库)配置 SSL 连接的最小和最大版本。这段代码通过条件编译控制不同场景下的 **TLS 协议版本限制**,以增强安全性或兼容性。 --- ### ✅ 逐行解释与逻辑分析 ```c #ifdef INCLUDE_IMDA mbedtls_ssl_conf_min_version(&ssl->ssl_config, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3); #else ``` #### 含义: - 如果定义了宏 `INCLUDE_IMDA`(比如用于某种设备管理协议,如 TR-069/CWMP),则: - 设置 **最低 TLS 版本为 TLS 1.2**(因为 `MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3` 对应 **TLS 1.2**)。 - 否则进入下面的分支。 > 🔍 注:mbed TLS 中版本对应关系如下: > > | 宏定义 | 实际协议 | > |--------|---------| > | `MBEDTLS_SSL_MINOR_VERSION_1` | TLS 1.0 | > | `MBEDTLS_SSL_MINOR_VERSION_2` | TLS 1.1 | > | `MBEDTLS_SSL_MINOR_VERSION_3` | TLS 1.2 | > | (未来可能支持 TLS 1.3 使用新值) | --- ```c #ifdef INCLUDE_HTTP_SSL_MIN_TLS1_2 if (1 != is_cwmp) { mbedtls_ssl_conf_min_version(&ssl->ssl_config, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3); } else #endif /* INCLUDE_HTTP_SSL_MIN_TLS1_2 */ ``` #### 含义: - 如果定义了 `INCLUDE_HTTP_SSL_MIN_TLS1_2`(表示“HTTP 相关功能要求最低 TLS 1.2”): - 判断是否是 CWMP(TR-069 客户端)连接: - 如果 **不是 CWMP 连接**(`is_cwmp == 0`)→ 强制最低版本为 **TLS 1.2** - 如果 **是 CWMP 连接** → 跳过此设置,走后面的 else 分支(即允许更低版本) > 💡 为什么对 CWMP 放宽? > 某些旧设备(如早期路由器)运行的 ACS 服务器或自身实现不支持 TLS 1.2,为了兼容性允许降级到 TLS 1.1 或 TLS 1.0(但受后续配置影响)。 --- ```c { mbedtls_ssl_conf_min_version(&ssl->ssl_config, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1); } #endif /* INCLUDE_IMDA */ ``` #### 含义: - 在非 IMDA 且未启用强制 TLS 1.2 的情况下(或虽然是 `INCLUDE_HTTP_SSL_MIN_TLS1_2` 但当前是 CWMP 连接),设置最低版本为: - `MBEDTLS_SSL_MINOR_VERSION_1` → 即 **TLS 1.0** > ⚠️ 注意:这是较弱的安全策略,仅用于兼容老旧系统。 --- ### ✅ 最后一行:设置最大版本 ```c mbedtls_ssl_conf_max_version(&ssl->ssl_config, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3); ``` #### 含义: - 设置 **最高支持的协议版本为 TLS 1.2** - 禁止使用更高版本(例如 TLS 1.3,即使库支持) - 主要是为了统一行为、避免协商出不可控的新协议(常见于嵌入式系统) --- ### 🧩 总结:整体逻辑流程图 ```text 是否定义 INCLUDE_IMDA? ├── 是 → 最低版本 = TLS 1.2 └── 否 └── 是否定义 INCLUDE_HTTP_SSL_MIN_TLS1_2? ├── 是 │ └── 是否是 CWMP 连接? │ ├── 是 → 最低版本 = TLS 1.0 │ └── 否 → 最低版本 = TLS 1.2 └── 否 → 最低版本 = TLS 1.0 最终所有情况都设置: → 最高版本 = TLS 1.2 ``` --- ### 🔐 安全性说明 | 配置路径 | 最小版本 | 最大版本 | 安全等级 | 用途 | |--------|----------|----------|--------|------| | `INCLUDE_IMDA` 开启 | TLS 1.2 | TLS 1.2 | ✅ 高 | 新设备/安全通信 | | HTTP 强制 TLS 1.2 + 非 CWMP | TLS 1.2 | TLS 1.2 | ✅ 高 | Web 接口加密 | | 其他情况(含 CWMP) | TLS 1.0 | TLS 1.2 | ⚠️ 中/低 | 兼容老设备 | > ❗ TLS 1.0 和 1.1 已被现代标准弃用(存在 POODLE、BEAST 等漏洞),建议逐步淘汰。 --- ### ✅ 建议优化方向 如果你可以升级系统: ```c // 统一推荐配置(只允许 TLS 1.2) mbedtls_ssl_conf_min_version(&ssl->ssl_config, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3); mbedtls_ssl_conf_max_version(&ssl->ssl_config, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3); ``` 或者如果 mbed TLS ≥ 2.16 并支持 TLS 1.3: ```c mbedtls_ssl_conf_min_version(&ssl->ssl_config, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_4); // TLS 1.3 ``` 但需注意硬件资源和对端兼容性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值