acwing 600. 仰視奶牛

題目地址  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

數據範圍

1N1e5
1Hi1e6
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 }
View Code
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息