第一题考场上没写出来,后面想想感觉可以用单调栈先找到每个元素下一个最小元素去做,大伙看看有啥问题吗 #include <bits/stdc++.h> using namespace std; int main(int argc, char *argv[], char *en***bsp;{   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; }
Screenshot from 2021-04-14 12-28-53.png