Advertisement
Guest User

Untitled

a guest
May 27th, 2015
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.31 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cmath>
  3. #include <cstdlib>
  4. #include <vector>
  5. #include <iostream>
  6. #include <cstring>
  7. #include <algorithm>
  8. #include <queue>
  9. #include <set>
  10. #include <map>
  11. #include <stack>
  12.  
  13. using namespace std;
  14.  
  15. #define x first
  16. #define y second
  17.  
  18. #define mp make_pair
  19. #define pb push_back
  20.  
  21. typedef pair<int, int> ii;
  22.  
  23. const int INF = 0x3f3f3f3f;
  24.  
  25. int main() {
  26. std::ios::sync_with_stdio(false);
  27.  
  28. int n;
  29. cin >> n;
  30.  
  31. vector<int> v(n), res(n + 1), left(n);
  32.  
  33. for (int i = 0; i < n; i++) {
  34. cin >> v[i];
  35. }
  36.  
  37. stack<ii> s;
  38.  
  39. for (int i = 0; i < n; i++) {
  40. int last;
  41. for (; s.size() > 0 && v[i] <= s.top().x; s.pop());
  42. if (!s.size()) {
  43. last = 0;
  44. } else {
  45. last = s.top().y + 1;
  46. }
  47. s.push(mp(v[i], i));
  48. left[i] = last;
  49. }
  50.  
  51. for (; s.size(); s.pop());
  52. for (int i = n - 1; i >= 0; i--) {
  53. int last;
  54. for (; s.size() > 0 && v[i] <= s.top().x; s.pop());
  55. if (!s.size()) {
  56. last = n - 1;
  57. } else {
  58. last = s.top().y - 1;
  59. }
  60. s.push(mp(v[i], i));
  61.  
  62. res[last - left[i] + 1] = max(res[last - left[i] + 1], v[i]);
  63. }
  64.  
  65. for (int i = n - 1; i; i--) {
  66. res[i] = max(res[i], res[i + 1]);
  67. }
  68.  
  69. for (int i = 1; i <= n; i++) {
  70. cout << res[i] << " ";
  71. }
  72. cout << "\n";
  73.  
  74. return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement