1 条题解

  • 0
    @ 2026-1-28 13:01:29
    #include <bits/stdc++.h>
    using namespace std;
    
    // [1] arr数组-存储每头奶牛的体重,最多支持1e6+100个元素(适配n≤1e6的数据范围)
    int arr[1000100];
    
    int main() {
        // [2] n-奶牛的总数(1 < n ≤ 1e6)
        int  n;
    	cin>>n;
        // [3] 读取n头奶牛的体重,存入arr数组(0-based索引)
    	for(int i=0;i<n;i++)	cin>>arr[i];
        // [4] s-单调递增栈,用于维护当前奶牛左侧的候选牛(栈内元素按体重递增,栈顶即为当前奶牛左侧第一头更轻的牛)
    	stack<int> s;
    	
        // [5] 遍历每头奶牛,计算其左侧第一头更轻的牛的体重
    	for(int i=0;i<n;i++){
            // [6] 维护单调递增栈:弹出栈顶所有体重≥当前奶牛的元素
            // 逻辑:这些牛的体重≥当前牛,不可能成为后续奶牛的“左侧第一轻”候选,因此可以安全弹出
    		while(!s.empty() && arr[i] <= s.top()){
    			s.pop();
    		}
    		
            // [7] 输出当前奶牛的答案:栈为空则左侧无更轻的牛(输出0),否则栈顶是左侧第一头更轻的牛的体重
    		if(s.empty()) cout<<0<<" ";
    		else cout<<s.top()<<" ";
    		
            // [8] 将当前奶牛的体重压入栈,作为后续奶牛的候选
    		s.push(arr[i]);	
    	}
        return 0;
    }
    
    • 1

    信息

    ID
    1262
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    1
    已通过
    1
    上传者