fork(2) download
  1. #include <iostream>
  2. #include <vector>
  3. #include <stack>
  4.  
  5. using namespace std;
  6. vector<int> in, gl;
  7. stack<int> s;
  8.  
  9. void find_next_greater(void);
  10.  
  11. int main()
  12. {
  13. find_next_greater();
  14.  
  15. for ( int i = 0; i < gl.size(); i++ )
  16. cout << in[i] << " -> " << (gl[i] == -1 ? gl[i] : in[gl[i]]) << endl;
  17.  
  18. return 0;
  19. }
  20.  
  21. void find_next_greater(void){
  22.  
  23. int tmp;
  24. while ( cin >> tmp )
  25. {
  26. in.push_back(tmp);
  27. while ( !s.empty() && in[s.top()] < tmp )
  28. {
  29. gl[s.top()] = in.size()-1;
  30. s.pop();
  31. }
  32.  
  33. gl.resize(in.size());
  34. s.push(in.size()-1);
  35. }
  36.  
  37. while ( !s.empty() )
  38. {
  39. gl[s.top()] = -1;
  40. s.pop();
  41. }
  42. }
  43.  
Success #stdin #stdout 0s 3476KB
stdin
1 29 4 20 19 17 28
stdout
1 -> 29
29 -> -1
4 -> 20
20 -> 28
19 -> 28
17 -> 28
28 -> -1