題解
$d$ 表示第 $d$ 天
我們注意兩種情況,當
- $d = 1$ 時,因為沒有更早的交易價格,也就是絕對買不到更早的股票,所以 $t_1$ 必為 $-1$
- $d \ne 1$時 $\dots$
我們可以很清楚的知道,我們要找的 $t_i$,其實就是對於第 $i$ 天,
在第 $[1 ,\ i-1]$ 天中,找到最大的 $k$ 使得 $k \lt i$ 時,$p_k \le p_i$
這個 $k$ 就是我們要找的 $t_i$
程式碼
#include <bits/stdc++.h>
using namespace std;
signed main() {
int n;
cin >> n;
vector<int> p(n+1,0), ls(n+1, -1);
for(int i = 1; i <= n; i++) {
cin >> p[i];
}
stack<int> st;
st.push(n);
/*找上一個較小或相等的值*/
for(int k = n-1; k >= 1; k--) {
while(!st.empty() && p[k] <= p[st.top()]) {
/*當 pk <= 最上面的值,也就是 pi 時,代表我們找到離 i 最近的時間 k*/
/*紀錄上一個 pk 比自己小的時間 ti = k*/
ls[st.top()] = k;
st.pop();
}
st.push(i);
}
for(int i = 1; i <= n; i++) {
cout << ls[i] << (i==n?"\n":" ");
}
}