e
查看原帖
e
819095
muhexin2008楼主2023/12/18 17:28
#include <fstream>
using namespace std;
struct st{
  int lf,rt,ln,rn,num;  	
}  a[100000];
int n,m,an;
   void ins(int l,int r,int p){
   	  int i,j,mid;   	  
   	 // cout<<l<<" "<<r<<"     "<<p<<"      ";
   	 
   	  if(a[p].lf==l&&a[p].rt==r){
   	  	a[p].num++; 
		 }
	  else{
	  	mid=(a[p].lf+a[p].rt)/2;
		if(a[p].ln==0){
			an++;
			a[p].ln=an;
	        a[an].lf=a[p].lf; 
	        a[an].rt=mid; 
	        a[an].ln=0;a[an].rn=0;
	        a[an].num=0; 	   
			an++;
			a[p].rn=an;
	        a[an].lf=mid+1; 
	        a[an].rt=a[p].rt; 
	        a[an].ln=0;a[an].rn=0;
	        a[an].num=0; 
		}   
	     if(mid>=r)  ins(l,r,a[p].ln);
	     else
	       if(l>mid)  ins(l,r,a[p].rn);
	     else{
	     	ins(l,mid,a[p].ln);
	     	ins(mid+1,r,a[p].rn);
		 }  
	  }	 
   }
 void prt(int p){
 	if(p!=0){
 		 prt(a[p].ln);
 		 if(a[p].num!=0){
 		 	  cout<<a[p].lf<<" "<<a[p].rt<<" "<<a[p].num<<endl;
		  }
		 prt(a[p].rn);
	 }
 } 
 int fnd(int k,int p){
 	int m=0,mid;
 	if(p!=0){
 		mid=(a[p].rt+a[p].lf)/2;
 		if(k<=mid) m=fnd(k,a[p].ln); else m=fnd(k,a[p].rn);
	 }
	 return m+a[p].num;

 } 
int main(){
	int aj,ak,i;
	ifstream fin("q.txt");
	fin>>n>>m;	
	a[1].lf=0; 
	a[1].rt=100000; 
	a[1].ln=0;a[1].rn=0;
	a[1].num=0; 
	an=1;
	for(i=1;i<=n;i++){
	 fin>>aj>>ak;	
	 ins(aj,ak,1);
	}
	prt(1);
	for(i=1;i<=m;i++){
		fin>>aj;
		cout<<fnd(aj,1)<<" ";
	}
	fin.close();
}```
2023/12/18 17:28
加载中...