Advertisement
mahfuj02

Catapult that ball

Feb 18th, 2020
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.14 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int arr[50005];
  4. int tree[50005*3];
  5.  
  6. void init(int node,int b,int e)
  7. {
  8.     if(b==e)
  9.     {
  10.         tree[node]=arr[b];
  11.         return;
  12.     }
  13.     int left = node*2;
  14.     int right = node*2 +1;
  15.     int mid = (b+e)/2;
  16.     init(left,b,mid);
  17.     init(right,mid+1,e);
  18.     tree[node] = max(tree[left],tree[right]);
  19.  
  20. }
  21. int query(int node,int b,int e, int i,int j)
  22. {
  23.     if(i>e || j<b)
  24.     {
  25.         return 0;
  26.     }
  27.     if( i<=b && j>=e)
  28.     {
  29.         return tree[node];
  30.     }
  31.     int left = node*2;
  32.     int right = node*2 +1;
  33.     int mid = (b+e)/2;
  34.     int p1 = query(left,b,mid,i,j);
  35.     int p2 = query(right,mid+1,e,i,j);
  36.     return max(p1,p2);
  37.  
  38.  
  39.  
  40. }
  41.  
  42.  
  43. int main()
  44. {
  45.     int n,m;
  46.     scanf("%d %d",&n,&m);
  47.     for(int i = 1; i<=n; i++)
  48.     {
  49.         scanf("%d",&arr[i]);
  50.     }
  51.     init(1,1,n);
  52.     int ans =0;
  53.     int tmp =0;
  54.     for(int i = 1; i<=m; i++)
  55.     {
  56.         int x,y;
  57.         scanf("%d %d",&x,&y);
  58.         int q = query(1,1,n,x,y);
  59.         if(i==1)continue;
  60.         tmp = min(tmp,q);
  61.         if(q>=tmp)
  62.             ans++;
  63.     }
  64.     printf("%d\n",ans);
  65.  
  66.  
  67.  
  68.  
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement