一、hdu4325
#include<bits/stdc++.h>
using namespace std;
const int N=100000+10;
struct Node{int b,e;}A[N];
int _,n,m,a[N*4],B[N],z[N],c;
int lowbit(int x){return x&-x;}
void add(int x,int y){for(int i=x;i<=c;i+=lowbit(i))z[i]+=y;}
int ask(int x){int y=0;while(x){y+=z[x];x-=lowbit(x);}return y;}
int main(){
scanf("%d",&_);
for(int cas=1;cas<=_;cas++){
scanf("%d%d",&n,&m);
memset(z,0,sizeof(z));
c=0;
for(int i=1;i<=n;i++){
scanf("%d%d",&A[i].b,&A[i].e);
a[++c]=A[i].b;a[++c]=A[i].e;
}
for(int i=1;i<=m;i++){scanf("%d",&B[i]);a[++c]=B[i];}
sort(a+1,a+c+1);//排序
c=unique(a+1,a+c+1)-a-1;//去重
for(int i=1;i<=n;i++){
int x=lower_bound(a+1,a+c+1,A[i].b)-a;
int y=lower_bound(a+1,a+c+1,A[i].e)-a;
add(x,1);add(y+1,-1);
}
printf("Case #%d:\n",cas);
for(int i=1;i<=m;i++){
int t=lower_bound(a+1,a+c+1,B[i])-a;
printf("%d\n",ask(t));
}
}
return 0;
}
该篇博客主要探讨了如何使用排序算法(如快速排序)和查找算法(如二分查找)来优化数据处理。代码示例中展示了在处理区间数据和特定值查询时,利用C++实现的高效算法。通过排序和去重,实现了对区间数据的快速统计,并用平衡树或哈希表辅助查询,提高了查询效率。
2万+

被折叠的 条评论
为什么被折叠?



