SuitNdtie

Laxy

Apr 13th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<algorithm>
  3. using namespace std;
  4. int n,m;
  5. typedef long long int ll;
  6.  
  7. struct elem{
  8.     ll data;
  9.     int index;
  10. };
  11. elem arr[100010];
  12.  
  13. bool mycmp(elem a,elem b){
  14.     if(a.data == b.data){
  15.         return a.index < b.index;
  16.     }
  17.     return a.data < b.data;
  18. }
  19.  
  20. void Bsearch(int l,int r,ll key,int L,int R){
  21.     if(l > r){
  22.         printf("0\n");
  23.         return;
  24.     }
  25.     int m = (l + r)/2;
  26.     if(arr[m].data == key){
  27.         int i = m,j = m;
  28.         while(i-1 >= 1 && arr[i-1].data == key)i--;
  29.         while(j+1 <= n && arr[j+1].data == key)j++;
  30.         int cnt = 0;
  31.         for(int idx = i ; idx <= j ; idx++){
  32.             if(arr[idx].index >= L && arr[idx].index <= R){
  33.                 cnt++;
  34.             }
  35.         }
  36.         printf("%d\n",cnt);
  37.     }
  38.     else if(arr[m].data > key){
  39.         Bsearch(l,m-1,key,L,R);
  40.     }
  41.     else if(arr[m].data < key){
  42.         Bsearch(m+1,r,key,L,R);
  43.     }
  44. }
  45.  
  46. int main()
  47. {
  48.     scanf("%d %d",&n,&m);
  49.     for(int i=1;i<=n;i++){
  50.         scanf("%lld",&arr[i].data);
  51.         arr[i].index = i;
  52.     }
  53.     sort(arr+1,arr+n+1,mycmp);
  54.     for(int q = 1 ; q <= m ; q++){
  55.         int l,r;
  56.         ll key;
  57.         scanf("%d %d %lld",&l,&r,&key);
  58.         Bsearch(1,n,key,l,r);
  59.     }
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment