1 条题解
-
0
#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
- 上传者