hkshakib

Untitled

Feb 18th, 2020
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.11 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. if(q>=arr[i])
  61. ans++;
  62. }
  63. printf("%d\n",ans);
  64.  
  65. }
Advertisement
Add Comment
Please, Sign In to add comment