题目链接:逛街
#include<stdio.h>
#include<iostream>
#include<vector>
#include<queue>
#include<string.h>
#include<math.h>
#include<unordered_map>
#include<algorithm>
#include<deque>
#include<set>
#include<stack>
using namespace std;
void test(vector<int> nums, int n) {
vector<int> h1(n, 0);
vector<int> h2(n, 0);
stack<int> s1, s2;
// look left
for(int i=0, j=n-1; i<n, j>=0; i++, j--) {
h1[i] = s1.size();
h2[j] = s2.size();
while(!s1.empty() and s1.top() <= nums[i]) s1.pop();
while(!s2.empty() and s2.top() <= nums[j]) s2.pop();
s1.push(nums[i]);
s2.push(nums[j]);
}
for(int i=0; i<n; i++) {
h1[i] += h2[i] + 1;
}
for(int i=0; i<n-1; i++)
printf("%d ", h1[i]);
printf("%d\n", h1[n-1]);
return;
}
int main()
{
int n;
scanf("%d", &n);
vector<int> nums(n, 0);
for(int i=0; i<n; i++)
scanf("%d", &nums[i]);
test(nums, n);
return 0;
}