Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int arr[50005];
- int tree[50005*3];
- void init(int node,int b,int e)
- {
- if(b==e)
- {
- tree[node]=arr[b];
- return;
- }
- int left = node*2;
- int right = node*2 +1;
- int mid = (b+e)/2;
- init(left,b,mid);
- init(right,mid+1,e);
- tree[node] = max(tree[left],tree[right]);
- }
- int query(int node,int b,int e, int i,int j)
- {
- if(i>e || j<b)
- {
- return 0;
- }
- if( i<=b && j>=e)
- {
- return tree[node];
- }
- int left = node*2;
- int right = node*2 +1;
- int mid = (b+e)/2;
- int p1 = query(left,b,mid,i,j);
- int p2 = query(right,mid+1,e,i,j);
- return max(p1,p2);
- }
- int main()
- {
- int n,m;
- scanf("%d %d",&n,&m);
- for(int i = 1; i<=n; i++)
- {
- scanf("%d",&arr[i]);
- }
- init(1,1,n);
- int ans =0;
- int tmp =0;
- for(int i = 1; i<=m; i++)
- {
- int x,y;
- scanf("%d %d",&x,&y);
- int q = query(1,1,n,x,y);
- if(i==1)continue;
- tmp = min(tmp,q);
- if(q>=tmp)
- ans++;
- }
- printf("%d\n",ans);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement