Guest User

Untitled

a guest
Sep 3rd, 2019
1,894
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.25 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef long double ld;
  7. typedef pair < int , pair < int , int > > mp;
  8.  
  9. #define rep(i , j , n) for(long long i = j ; i <= n ; i++)
  10. #define per(i , j , n) for(long long i = j ; i >= n ; i--)
  11.  
  12. const ll N = 1234567;
  13. const ll mod = 1e9 + 7;
  14. const ld eps = 1e-6;
  15. const ld pi = 3.1415926535;
  16.  
  17. pair < int , int > a[N];
  18.  
  19. long long seg[4 * N];
  20. long long combine(long long &a, long long &b) {
  21.     return max(a , b);
  22. }
  23. void build(long long t, long long i, long long j) {
  24.     if (i == j) {
  25.         seg[t] = a[i].second;
  26.         return ;
  27.     }
  28.     long long mid = (i + j) / 2;
  29.     build(t * 2, i, mid);
  30.     build(t * 2 + 1, mid + 1, j);
  31.     seg[t] = combine(seg[2*t], seg[2*t+1]);
  32. }
  33. void update(long long t, long long i, long long j, long long x, long long y) {
  34.     if (i > y || j < x) {
  35.         return ;
  36.     }
  37.     if (i == j) {
  38.         seg[t] = y;
  39.         return ;
  40.     }
  41.     long long mid = (i + j) / 2;
  42.     update(t * 2, i, mid, x, y);
  43.     update(t * 2 + 1, mid + 1, j, x, y);
  44.     seg[t] = combine(seg[2*t], seg[2*t+1]);
  45. }
  46. long long query(long long t, long long i, long long j, long long l, long long r) {
  47.     if (l <=i && j <= r) {
  48.         return seg[t];
  49.     }
  50.     long long mid = (i + j) / 2;
  51.     if (l <= mid) {
  52.         if (r <= mid) {
  53.             return query(t * 2, i, mid, l, r);
  54.         }
  55.         else {
  56.             long long a = query(t * 2, i, mid, l, r);
  57.             long long b = query(t * 2 + 1,  mid + 1, j, l, r);
  58.             return combine(a, b);
  59.         }
  60.     }
  61.     else {
  62.         return query(t * 2 + 1,  mid + 1, j, l, r);
  63.     }
  64. }
  65.  
  66. int main() {
  67.     ios_base::sync_with_stdio(false);
  68.     cin.tie(NULL);
  69.  
  70.     cout << fixed << setprecision(12);
  71.  
  72.     int n;
  73.  
  74.     cin >> n;
  75.  
  76.     rep(i , 1 , n) {
  77.         cin >> a[i].first >> a[i].second;
  78.     }      
  79.  
  80.     sort(a + 1 , a + n + 1);
  81.  
  82.     int q;
  83.  
  84.     cin >> q;
  85.  
  86.     build(1 , 1 , n);
  87.  
  88.     rep(pp , 1 , q) {
  89.         int l , r;
  90.  
  91.         cin >> l >> r;
  92.    
  93.         pair < int , int > fi , se;
  94.  
  95.         fi = {l , INT_MIN};
  96.         se = {r , INT_MIN};
  97.         auto j1 = lower_bound(a + 1 , a + n + 1 , fi);
  98.         auto j2 = lower_bound(a + 1 , a + n + 1 , se);
  99.  
  100.         if((*j1).first > l) {
  101.             j1 = prev(j1);
  102.         }
  103.         if((*j2).first > r) {
  104.             j2 = prev(j2);
  105.         }
  106.  
  107.         int start = j1 - (a);
  108.         int end = j2 - (a);
  109.  
  110.         cout << query(1 , 1 , n , start , end) << endl;
  111.  
  112.         //cout << start << " " << end << endl;
  113.  
  114.     }
  115.     return 0;
  116. }
Add Comment
Please, Sign In to add comment