Problem - 2205D - Codeforces

Problem - 2205D - Codeforces

最终的序列一定是单调递减或者单调递增或者一个谷形

所以我们可以用单调栈从左到右一次单调栈维护每个元素作为谷底时左侧需要删除几个元素

然后从右往左进行单调栈,维护每个元素作为谷底的时候右侧需要删除几个元素

最终两侧的值相加就是这个元素作为谷底的代价

去最小值即可

代码如下:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
void solve() {
    int n;
    cin>>n;
    vector<int>a(n+1,0);
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    
    vector<int>stl,str,dl(n+1,0),dr(n+1,0);
    stl.push_back(INT_MAX);
    str.push_back(INT_MAX);
    for(int i=1;i<=n;i++){
        while(a[i]>stl.back()){
            stl.pop_back();
        }
        stl.push_back(a[i]);
        dl[i]=i+1-stl.size();
    }
    for(int i=n;i>=1;i--){
        while(a[i]>str.back()){
            str.pop_back();
        }
        str.push_back(a[i]);
        dr[i]=n-i+2-str.size();
    }
    int ans=INT_MAX;
    for(int i=1;i<=n;i++){
        ans=min(ans,dl[i]+dr[i]);
    }
    cout<<ans<<'\n';
}
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    int t=1;
    cin>>t;
    while(t--)solve();
}
相关推荐
生态学者6 小时前
Global Change Biology | 森林越“步调一致”,反而越怕干旱?树木生长与叶片活动的同步之谜
大数据·人工智能·算法·r语言·微信公众平台
lsswear6 小时前
Agent 框架新手入门与实战部署指南
大数据·人工智能·算法
Data analyse4568 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
Navigator_Z9 小时前
LeetCode //C - 1293. Shortest Path in a Grid with Obstacles Elimination
c语言·算法·leetcode
Nil20810 小时前
leetcode 64最小路径和
算法·leetcode·职场和发展
光影少年10 小时前
AI Agent、自动化与未来工作
人工智能·算法·架构
牧羊人.33310 小时前
计算机视觉基础 第16章|EigenFace,FisherFace,LBPH传统人脸识别算法
人工智能·算法·计算机视觉
Nil20810 小时前
leetcode 72编辑距离
算法·leetcode·职场和发展
神工坊10 小时前
技术分享︱SIMFORGE HSF® 网格加密与热点加速技术实践
算法·hpc·网格·cae·工程仿真·数值引擎·samr
CV@CV11 小时前
世界模型与智能体协同推理逻辑
人工智能·算法·边缘计算·量子计算·具身智能