【题解学习】序列题

参考链接:https://www.luogu.com.cn/problem/solution/P14665

先贴代码,后续补

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int mx,mn,n,m,a[5005];
struct qj{
	int l,r;
};
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	while(1){
		mx=0,mn=1e9;
		for(int i=1;i<=n;i++){
			mx=max(mx,a[i]);
			mn=min(mn,a[i]);
		}
		if(mx==mn||m==0) break;
		bool flag=0;
		int l=0,r=0;
		vector<qj> v1,v2;
		for(int i=1;i<=n;i++){
			if(a[i]==mx){
				flag=1;
				if(l==0) l=i;
				r=i;
			}
			if((a[i]==mn||i==n)&&flag==1){
				v1.push_back(qj{l,r});
				l=0,r=0;	
				flag=0;	
			}
		}
		for(int i=1;i<=n;i++){
			if(a[i]==mn){
				flag=1;
				if(l==0) l=i;
				r=i;
			}
			if((a[i]==mx||i==n)&&flag==1){
				v2.push_back(qj{l,r});
				l=0,r=0;
				flag=0;		
			}
		}
		int cnt1=v1.size(),cnt2=v2.size();
		if(cnt1<cnt2){
			if(m>=cnt1) {
				m-=cnt1;
				for(int i=0;i<cnt1;i++){
					for(int j=v1[i].l;j<=v1[i].r;j++) a[j]--;
				}
			}
			else break;
		}
		else{
			if(m>=cnt2) {
				m-=cnt2;
				for(int i=0;i<cnt2;i++){
				for(int j=v2[i].l;j<=v2[i].r;j++) a[j]++;
				}
			}
			else break;
		}
	}
	mx=0,mn=1e9;
	for(int i=1;i<=n;i++){
		mx=max(mx,a[i]);
		mn=min(mn,a[i]);
	}
	cout<<mx-mn;
	return 0;
} 
相关推荐
:-)3 小时前
算法-归并排序
java·开发语言·数据结构·算法·排序算法
寒月小酒4 小时前
第三章 索引构建(2-all -in-rag学习)
学习
天国梦4 小时前
中学生居家英语听力训练深度解析:从核心痛点到AI赋能的全链路方案
人工智能·学习
Jerry7 小时前
LeetCode 101. 对称二叉树
算法
可编程芯片开发8 小时前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
AI科技星8 小时前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
米罗篮8 小时前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
dream_home84078 小时前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
胡渠洋9 小时前
postman学习
学习·测试工具·postman
大鱼>9 小时前
多宠物家庭智能管理平台:云端架构与多设备协同实战
python·算法·iot·宠物