http://acm.nyist.net/JudgeOnline/problem.php?pid=600
只附代码好了
#include<bits/stdc++.h> using namespace std; const int N=100002; struct node { int num,id; } s[N]; int s1[N],a[N]; bool cmp(node x,node y) { return x.num<y.num; } int lowbit(int x) { return x&-x; } void add(int i,int x) { while(i<N) { a[i]+=x; i+=lowbit(i); } } int sum(int i) { int ret=0; while(i) { ret+=a[i]; i-=lowbit(i); } return ret; } int main() { int t; scanf("%d",&t); while(t--) { memset(a,0,sizeof(a)); int n,m; scanf("%d%d",&n,&m); n<<=1;m+=n; for(int i=1;i<=m;i++) { scanf("%d",&s[i].num); s[i].id=i; } sort(s+1,s+m+1,cmp); int cnt=0; s1[s[1].id]=++cnt; for(int i=2;i<=m;i++) if(s[i].num!=s[i-1].num) s1[s[i].id]=++cnt; else s1[s[i].id]=cnt; for(int i=1;i<=n;) add(s1[i++],1),add(s1[i++]+1,-1); for(int i=n+1;i<=m;i++) printf("%d\n",sum(s1[i])); } }