#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#define LL long long
using namespace std;
int num[1000008],a[500001],b[400001],d[400001],id,n;
LL l[500001],r[500001];
int lobit(int x)
{
return x & -x;
}
LL sum (int x)
{
LL ans = 0;
while(x>0)
{
ans += num[x];
x -= lobit(x);
}
return ans;
}
void add(int x,int d)
{
while(x <=id-1)
{
num[x] += d;
x += lobit(x);
}
}
int m;
int main()
{
int T,m;
LL s;
scanf("%d",&T);
while(T--)
{
id = 1;
scanf("%d%d",&n,&m);
memset(num,0,sizeof(num));
for(int i=1;i<=n;i++)
{
scanf("%lld%lld",&l[i],&r[i]);
a[2*i-1] = l[i];
a[2*i] = r[i];
}
for(int i=2*n+1;i<=2*n+m;i++){
scanf("%d",&a[i]);
d[i] = a[i];
}
sort(a+1,a+2*n+m+1);
for(int i=1;i<=2*n+m;i++)
{
if(a[i]!=a[i-1])b[id++] = a[i];
}
for(int i=1;i<=n;i++)
{
int lp = lower_bound(b+1,b+id,l[i]) - (b);
int rp = lower_bound(b+1,b+id,r[i]) - (b);
add(lp,1);
add(rp+1,-1);
}
for(int i=2*n+1;i<=2*n+m;i++)
{
int x = lower_bound(b+1,b+id,d[i])-b;
// cout <<"x === " <<x<<endl;
printf("%lld\n",sum(x));
}
}
}
nyist 花儿朵朵 离散化 + 树状数组
最新推荐文章于 2018-07-20 23:15:33 发布