CF1326E Bombs(思维题)

博客详细介绍了 CF1326E Bombs 问题的题意和解题思路。题目要求根据排列和炸弹顺序计算放置炸弹后的最大值。分析中提到关键在于利用线段树判断并更新区间后缀和,以解决 ans 小于某值时的条件。博主分享了自己在理解问题本质上的困难,并提供了相应的代码实现。

题意

给出一个排列 {pi}\{p_i\}{pi},同时给出一个炸弹顺序 {qi}\{q_i\}{qi},第 iii 颗炸弹放在第 qiq_iqi 处。每次从左往右加入 pip_ipi,遇到炸弹时炸掉当前最大值。输出放前 iii 颗炸弹最终序列的最大值(i=0,1,2...,n−1i=0,1,2...,n-1i=0,1,2...,n1)。

分析

这题真是巧妙啊!我太蒻了!
首先,ansi≥ansi+1ans_i\geq ans_{i+1}ansiansi+1。于是我们每次要得到 ansi+1ans_{i+1}ansi+1,只需要从 ansians_iansi 不断减 111 减过来即可。那么要减多少次 111 呢?这就要观察答案的性质了。
ans<xans<xans<x 时,有以下事实:
每个大于等于 xxx 的数 vvv 都会被炸掉!也就是说,每个 vvv 后面都有一个炸弹专门炸它的。每个 vvv 和离它最近的炸弹形成一个匹配。
那么,我们让每个 vvv 所在位置 +1+1+1,让每个炸弹所在位置 −1-11,令 bib_ibi[i,n][i,n][i,n] 的后缀和。(有点像括号序列)
现在 ans<xans<xans<x 的条件即为:对于每个 bib_ibibi≤0b_i\leq 0bi0
所以我们用线段树找到最大的 bib_ibi 即可。
每次加数或者遇到炸弹都是修改一个区间的后缀和,用线段树实现区间加即可。
时间复杂度 O(nlogn)O(nlogn)O(nlogn)
此题的关键在于每次判断 ansansans 要减到多少,然而我太蒻了根本不会QAQ

代码如下

#include <bits/stdc++.h>
#define N 300005
#define lson l, m, rt << 1
#define rson m + 1, r, rt << 1 | 1
using namespace std;
typedef long long LL;
typedef unsigned long long uLL;
int p[N], q[N];
LL val[N * 4], tag[N * 4];
void pushdown(int rt){
	if(tag[rt]){
		tag[rt << 1] += tag[rt];
		tag[rt << 1 | 1] += tag[rt];
		val[rt << 1] += tag[rt];
		val[rt << 1 | 1] += tag[rt];
		tag[rt] = 0;
	}
}
void update(int l, int r, int rt, int a, int b, int c){
	if(l >= a && r <= b){
		val[rt] += c;
		tag[rt] += c;
		return;
	}
	pushdown(rt);
	int m = l + r >> 1;
	if(a <= m) update(lson, a, b, c);
	if(b > m) update(rson, a, b, c);
	val[rt] = max(val[rt << 1], val[rt << 1 | 1]);
}
int main(){
	int i, j, n, m, ret;
	scanf("%d", &n);
	for(i = 1; i <= n; i++) scanf("%d", &j), p[j] = i;
	for(i = 1; i <= n; i++) scanf("%d", &q[i]);
	ret = n;
	update(1, n, 1, 1, p[ret], 1);
	printf("%d ", ret);
	for(i = 1; i < n; i++){
		update(1, n, 1, 1, q[i], -1);
		while(val[1] <= 0){
			ret--;
			update(1, n, 1, 1, p[ret], 1);
		}
		printf("%d ", ret);
	}
	return 0;
}
【故障诊断】【pytorch】基于CNN-LSTM故障分类的轴承故障诊断研究[西储大学数据](Python代码实现)内容概要:本文介绍了基于CNN-LSTM神经网络模型的轴承故障分类方法,利用PyTorch框架实现,采用西储大学(Case Western Reserve University)公开的轴承故障数据集进行实验验证。该方法结合卷积神经网络(CNN)强大的特征提取能力和长短期记忆网络(LSTM)对时序数据的建模优势,实现对轴承不同故障类型和严重程度的高精度分类。文中详细阐述了数据预处理、模型构建、训练流程及结果分析过程,并提供了完整的Python代码实现,属于典型的工业设备故障诊断领域深度学习应用研究。; 适合人群:具备Python编程基础和深度学习基础知识的高校学生、科研人员及工业界从事设备状态监测与故障诊断的工程师,尤其适合正在开展相关课研究或希望复现EI级别论文成果的研究者。; 使用场景及目标:① 学习如何使用PyTorch搭建CNN-LSTM混合模型进行时间序列分类;② 掌握轴承振动信号的预处理与特征学习方法;③ 复现并改进基于公开数据集的故障诊断模型,用于学术论文撰写或实际工业场景验证; 阅读建议:建议读者结合提供的代码逐行理解模型实现细节,重点关注数据加载、滑动窗口处理、网络结构设计及训练策略部分,鼓励在原有基础上尝试不同的网络结构或优化算法以提升分类性能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值