題目地址 https://www.acwing.com/problem/content/description/602/ios
約翰有N頭奶牛,編號爲1到N。ide
如今這N頭奶牛按編號從小到大的順序站成了一排,其中奶牛 i 的身高爲HiHi。spa
如今,每頭奶牛都向它的右側望向那些編號較大的奶牛,對於奶牛 i 若是存在一頭奶牛 j 知足 i<ji<j 而且 Hi<HjHi<Hj,那麼咱們稱奶牛 i 須要仰視奶牛 j。code
請你求出每頭奶牛的最近仰視對象。xml
第一行包含整數N。對象
接下來N行,每行包含一個整數HiHi,其中第 i 行的數爲編號爲 i 的奶牛的高度。blog
共 N 行,每行輸出一個整數,其中第 i 行的輸出整數表示編號爲 i 的奶牛的最近仰視對象的編號,若是不存在仰視對象,則輸出0。ip
1≤N≤1e5
1≤Hi≤1e6
ci
輸入樣例: 6 3 2 6 1 1 2 輸出樣例: 3 3 0 6 6 0
單調棧記錄最近的未仰視的牛編號(有仰視的答案已經記錄了 出棧)get
1 #include <iostream> 2 #include <vector> 3 #include <stack> 4 5 6 using namespace std; 7 8 const int N = 1e5+100; 9 10 vector<int> arr(N,0); 11 vector<int> ans(N,0); 12 stack<int> st; 13 int n ; 14 15 int main() 16 { 17 cin >> n; 18 for(int i =1;i<= n;i++){ 19 cin >> arr[i]; 20 } 21 22 for(int i =1;i <= n;i++){ 23 while(!st.empty() && arr[i]>arr[st.top()]){ 24 ans[st.top()] = i; 25 st.pop(); 26 } 27 28 st.push(i); 29 } 30 31 while(!st.empty()){ 32 ans[st.top()] = 0; 33 st.pop(); 34 } 35 36 for(int i = 1 ;i<=n;i++){ 37 cout << ans[i] << endl; 38 } 39 40 41 return 0; 42 }