# include<stdio.h>
# include<string.h>
# include<algorithm>
using namespace std;
int a[100005],c[100005];
struct order
{
int num;
int ord;
}s[200005];
bool cmp(order x,order y)
{
return x.num<y.num;
}
int lowbit(int x)
{
return x&-x;
}
void update(int x,int y)
{
while(x>0)
{
a[x]=a[x]+y;
x=x-lowbit(x);
}
}
int get(int x)
{
int s=0;
while(x<100000)
{
s=s+a[x];
x=x+lowbit(x);
}
return s;
}
int main()
{
int t,n,m,i,j,k;
scanf("%d",&t);
while(t--)
{
memset(a,0,sizeof(a));
// memset(b,0,sizeof(b));
scanf("%d%d",&n,&m);
for(i=0;i<2*n+m;i++)
{
scanf("%d",&s[i].num);
s[i].ord=i+1;
}
sort(s,s+2*n+m,cmp);
//if(s[0].ord<=2*n)
c[s[0].ord]=1;
for(i=1,j=1;i<2*n+m;i++)
{
if(s[i].num!=s[i-1].num)
{
j++;
//if(s[i].ord<=2*n)
c[s[i].ord]=j;
}
else
{
//if(s[i].ord<=2*n)
c[s[i].ord]=j;
}
}
for(i=1;i<2*n;i++)
{
update(c[i+1],1);
update(c[i]-1,-1);
i++;
}
for(i=1;i<=m;i++)
{
printf("%d\n",get(c[i+2*n]));
}
}
return 0;
}
树状数组之插线问点
最新推荐文章于 2023-05-28 16:43:58 发布