Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<algorithm>
- using namespace std;
- int n,m;
- typedef long long int ll;
- struct elem{
- ll data;
- int index;
- };
- elem arr[100010];
- bool mycmp(elem a,elem b){
- if(a.data == b.data){
- return a.index < b.index;
- }
- return a.data < b.data;
- }
- void Bsearch(int l,int r,ll key,int L,int R){
- if(l > r){
- printf("0\n");
- return;
- }
- int m = (l + r)/2;
- if(arr[m].data == key){
- int i = m,j = m;
- while(i-1 >= 1 && arr[i-1].data == key)i--;
- while(j+1 <= n && arr[j+1].data == key)j++;
- int cnt = 0;
- for(int idx = i ; idx <= j ; idx++){
- if(arr[idx].index >= L && arr[idx].index <= R){
- cnt++;
- }
- }
- printf("%d\n",cnt);
- }
- else if(arr[m].data > key){
- Bsearch(l,m-1,key,L,R);
- }
- else if(arr[m].data < key){
- Bsearch(m+1,r,key,L,R);
- }
- }
- int main()
- {
- scanf("%d %d",&n,&m);
- for(int i=1;i<=n;i++){
- scanf("%lld",&arr[i].data);
- arr[i].index = i;
- }
- sort(arr+1,arr+n+1,mycmp);
- for(int q = 1 ; q <= m ; q++){
- int l,r;
- ll key;
- scanf("%d %d %lld",&l,&r,&key);
- Bsearch(1,n,key,l,r);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment