不是题解
使用单调栈
c++代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
const int maxn = 100005;
int b[maxn];
int n;
pair<int, int> a[maxn]; // id value
stack<pair<int, int>> p;
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
a[i].first = i;
cin >> a[i].second;
}
for (int i = 1; i <= n; i++)
{
if (p.empty())
{
p.push(a[i]);
}
else
{
while (!p.empty())
{
if (a[i].second > p.top().second)
{
b[p.top().first] = i - p.top().first;
p.pop();
}
else
break;
}
p.push(a[i]);
}
}
for (int i = 1; i <= n; i++)
{
cout << b[i] << endl;
}
}