第一题考场上没写出来,后面想想感觉可以用单调栈先找到每个元素下一个最小元素去做,大伙看看有啥问题吗 #include <bits/stdc++.h> using namespace std; int main(int argc, char *argv[], char *envp[]) { int n; cin >> n; vector<int> data(n); for (int i = 0; i < n; ++i) { scanf("%d", &data[i]); } vector<int> next(n, -1); stack<int> stk; for (int i = 0; i <= n; ++i) { if (stk.empty() || data[i] >= data[stk.top()]) { stk.push(i); } else { while (!stk.empty() && data[i] < data[stk.top()]) { next[stk.top()] = i; stk.pop(); } stk.push(i); } } int res = 0; for (int i = 0; i < n; ++i) { if (data[i] < res) { continue; } if (next[i] == -1) { if (n - i >= data[i]) { res = data[i]; } } else { if (next[i] - i >= data[i]) { res = data[i]; } } } cout << res; return 0; }
点赞 1

相关推荐

牛客网
牛客企业服务