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();
}
相关推荐
lsylalalala4 小时前
常见的排序算法1
数据结构·算法·排序算法
想吃火锅10054 小时前
【leetcode】54. 螺旋矩阵
算法·leetcode·矩阵
想吃火锅10054 小时前
【leetcode】300. 最长递增子序列
算法·leetcode·职场和发展
imaol15 小时前
数据结构---队列
java·数据结构·算法
数模竞赛Paid answer5 小时前
2026年电工杯数学建模A题绿电直连型电氢氨园区优化运行求解全过程论文及程序
算法·数学建模·电工杯
疯狂打码的少年5 小时前
【数据结构】串的模式匹配:KMP算法(重点)
数据结构·笔记·算法
晚风醉蝶6 小时前
第零篇-算法全景图
算法
疯狂打码的少年6 小时前
【数据结构】树的基本概念与二叉树定义
java·数据结构·笔记·算法
webmote336 小时前
用 NVIDIA Nemotron 3 Super + .NET 构建有记忆的多轮对话
后端·算法
Keven_116 小时前
算法札记:区分稀疏图与稠密图在经验上的数学计算差异
算法·稠密图·稀疏图