Advertisement
Guest User

Untitled

a guest
Sep 25th, 2015
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.67 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <sstream>
  6. #include <string>
  7. #include <queue>
  8. #include <deque>
  9. #include <set>
  10. #include <list>
  11. #include <map>
  12. #include <functional>
  13. #include <cmath>
  14. #include <cstdlib>
  15. #include <cstdio>
  16. #include <cstring>
  17. #include <numeric>
  18. #include <stack>
  19. #include <utility>
  20. using namespace std;
  21. #include <limits.h>
  22.  
  23. #define s(n) scanf("%d",&n)
  24. #define sl(n) scanf("%lld",&n)
  25. #define p(n) printf("%d ",n)
  26. #define pl(n) printf("%lld",n)
  27. #define sf(n) scanf("%f",&n)
  28. #define sd(n) scanf("%lf",&n)
  29. #define ss(n) scanf("%s",n)
  30. #define pf(n) printf("%f ",n)
  31. #define pd(n) printf("%lf ",n)
  32. #define ps(n) printf("%s ",n)
  33. #define nl putchar('\n')
  34. #define e1 first
  35. #define e2 second
  36.  
  37. #define INF (int)1e9
  38. #define MOD (int)(1e9+7)
  39. #define LINF (ll)1e18
  40. #define EPS 1e-11
  41. const double PI = acos(-1.0)
  42.  
  43. #define pow2(n) (1<<(n))
  44. #define pow2l(n) ((ll)1<<(n))
  45. #define MAX(a,b) ((a)>(b)?(a):(b))
  46. #define MIN(a,b) ((a)<(b)?(a):(b))
  47. #define ABS(n) ((a)<0?-(a):(a))
  48. #define MAXE(...) max_element(__VA_ARGS__)
  49. #define MINE(...) min_element(__VA_ARGS__)
  50.  
  51. #define FOR(i,a,b) for(int i=a;i<b;i++)
  52. #define RNG(i,n) FOR(i,0,n)
  53. #define REV(i,a,b) for(int i=a;i>=b;--i)
  54. #define FORECH(v,c) for(typeof((c).begin()) v=(c).begin(); v!=(c).end(); ++v)
  55. #define ALL(a) (a).begin(),(a).end()
  56. #define LEN(a) ((int)(a.size()))
  57. #define PB(x) push_back(x)
  58. #define TIMES(x) while((x)--)
  59. #define UPB upper_bound
  60. #define LWB lower_bound
  61. #define MP make_pair
  62.  
  63.  
  64. /////////////////////////////// FAST IO ///////////////////////////////////////
  65. #define gc getchar_unlocked
  66. void si(int &n){
  67. register int ch=gc();
  68. int neg = 0;
  69. n=0;
  70. while((ch<48||ch>57) && ch!='-')ch=gc();
  71. if(ch=='-'){ neg=1; ch=gc(); }
  72. for(;ch>47 && ch<58; ch=gc()) n = (n<<1)+(n<<3)+ch-48;
  73. if(neg)n=-n;
  74. }
  75. //////////////////////////////////////////////////////////////////////////////////////////////////
  76. //////////////////////////////////////////////////////////////////////////////////////////////////
  77.  
  78. void constructMinSegmentTree(int input[], int segTree[], int low, int high, int pos){
  79.  
  80. if(low == high) {segTree[pos] = input[low]; return;}
  81. int mid = low + (high - low) / 2;
  82. constructMinSegmentTree(input, segTree, low, mid, 2*pos + 1);
  83. constructMinSegmentTree(input, segTree, mid + 1, high, 2*pos + 2);
  84. segTree[pos] = MAX(segTree[2 * pos + 1] , segTree [2 * pos + 2]);
  85. return ;
  86. }
  87.  
  88. void consructTree(int input[], int segTree[], int len_input){
  89. constructMinSegmentTree(input, segTree, 0, len_input - 1, 0);
  90. }
  91.  
  92. int rangeMinimumQuery(int segTree[], int qlow, int qhigh, int low, int high, int pos){
  93. if(qlow <=low && qhigh >= high) return segTree [pos];
  94. else if( qlow > high || qhigh < low ) return INT_MIN;
  95. else{
  96. int mid = low + (high - low) / 2;
  97. return MAX(rangeMinimumQuery(segTree, qlow, qhigh, low, mid, 2 * pos + 1) ,
  98. rangeMinimumQuery(segTree, qlow, qhigh, mid + 1, high, 2 * pos + 2));
  99. }
  100. }
  101.  
  102. //////////////////////////////////////////////////////////////////////////////////////////////////
  103. //////////////////////////////////////////////////////////////////////////////////////////////////
  104. int input[50002], segTree[250000];
  105. int main(){
  106. std::ios::sync_with_stdio(false);
  107. int n, x, y;
  108. si(n);
  109. RNG(i, n) si (input[i]);
  110. consructTree(input, segTree, n);
  111. int m; si(m);
  112. while(m--){
  113. si(x); si(y);
  114. printf("%d\n", rangeMinimumQuery(segTree, x - 1, y -1, 0, n-1, 0));
  115. // rangeMinimumQuery(segTree, x - 1, y -1, 0, n-1, 0);
  116. }
  117. return 0;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement