hdu4325 Flowers【树状数组区间更新单点求值 离散化】
2016-03-27 16:29
323 查看
[align=left]Problem Description[/align]
As is known to all, the blooming time and duration varies between different kinds of flowers. Now there is a garden planted full of flowers. The gardener wants to know how many flowers will bloom in the garden in a specific time.
But there are too many flowers in the garden, so he wants you to help him.
[align=left]Input[/align]
The first line contains a single integer t (1 <= t <= 10), the number of test cases.
For each case, the first line contains two integer N and M, where N (1 <= N <= 10^5) is the number of flowers, and M (1 <= M <= 10^5) is the query times.
In the next N lines, each line contains two integer Si and Ti (1 <= Si <= Ti <= 10^9), means i-th flower will be blooming at time [Si, Ti].
In the next M lines, each line contains an integer Ti, means the time of i-th query.
[align=left]Output[/align]
For each case, output the case number as shown and then print M lines. Each line contains an integer, meaning the number of blooming flowers.
Sample outputs are available for more details.
[align=left]Sample Input[/align]
2
1 1
5 10
4
2 3
1 4
4 8
1
4
6
[align=left]Sample Output[/align]
Case #1:
0
Case #2:
1
2
1
[align=left]Author[/align]
BJTU
[align=left]Source[/align]
2012 Multi-University Training Contest 3
这个题是刚刚组队赛做的==,和hdu1556color the ball几乎一样,每朵花给出开放时间,询问某时刻有多少花开。只是多了离散化而已。注意修改模板中的“n”
As is known to all, the blooming time and duration varies between different kinds of flowers. Now there is a garden planted full of flowers. The gardener wants to know how many flowers will bloom in the garden in a specific time.
But there are too many flowers in the garden, so he wants you to help him.
[align=left]Input[/align]
The first line contains a single integer t (1 <= t <= 10), the number of test cases.
For each case, the first line contains two integer N and M, where N (1 <= N <= 10^5) is the number of flowers, and M (1 <= M <= 10^5) is the query times.
In the next N lines, each line contains two integer Si and Ti (1 <= Si <= Ti <= 10^9), means i-th flower will be blooming at time [Si, Ti].
In the next M lines, each line contains an integer Ti, means the time of i-th query.
[align=left]Output[/align]
For each case, output the case number as shown and then print M lines. Each line contains an integer, meaning the number of blooming flowers.
Sample outputs are available for more details.
[align=left]Sample Input[/align]
2
1 1
5 10
4
2 3
1 4
4 8
1
4
6
[align=left]Sample Output[/align]
Case #1:
0
Case #2:
1
2
1
[align=left]Author[/align]
BJTU
[align=left]Source[/align]
2012 Multi-University Training Contest 3
这个题是刚刚组队赛做的==,和hdu1556color the ball几乎一样,每朵花给出开放时间,询问某时刻有多少花开。只是多了离散化而已。注意修改模板中的“n”
#include <cstdio> #include <algorithm> #include<cstring> using namespace std; #define maxn 200008 int n,tree[maxn],X[maxn],li[maxn],ri[maxn],nn,m,mm,ma; int lowbit(int i) { return i&(-i); } void update(int i,int x) { while(i<=ma) { tree[i]=tree[i]+x; i=i+lowbit(i); } } long long query(int n) { long long sum=0; while(n>0) { sum+=tree ; n=n-lowbit(n); } return sum; } int Bin(int num,int R) { int l=0,r=R-1,mid; while(l<=r) { mid=(l+r)/2; if(X[mid]==num) return mid; if(X[mid]<num) l=mid+1; else r=mid-1; } } int q[maxn]; int main() { // freopen("cin.txt","r",stdin); int t,cas=1; scanf("%d",&t); while(t--) { nn=0,m=1,mm; memset(X,0,sizeof(X)); scanf("%d%d",&n,&mm); for(int i=0;i<n;i++) scanf("%d%d",&li[i],&ri[i]),X[nn++]=li[i],X[nn++]=ri[i]; for(int i=0;i<mm;i++)scanf("%d",&q[i]),X[nn++]=q[i]; sort(X,X+nn); // for(int i=0;i<nn;i++)printf("x=%d ",X[i]);puts(""); for(int i=1;i<nn;i++) if(X[i]!=X[i-1]) X[m++]=X[i]; // for(int i=m-1;i>0;i--)if(X[i]-X[i-1]>=1)X[m++]=X[i-1]+1; sort(X,X+m); ma=m+1; // for(int i=0;i<m;i++)printf("x=%d ",X[i]);puts(""); // printf("m=%d\n",m); memset(tree,0,sizeof(tree)); for(int i=0;i<n;i++) { int l=Bin(li[i],m); int r=Bin(ri[i],m); // printf("l=%d r=%d\n",l+1,r+1); update(l+1,1); update(r+2,-1); // update(li[i],1);update(ri[i]+1,-1); } printf("Case #%d:\n",cas++); for(int i=0;i<mm;i++) { int qu=Bin(q[i],m); // printf("qu=%d\n",qu+1); printf("%I64d\n",query(qu+1)); } } return 0; }
相关文章推荐
- win10 下使用VS2012 出现中文????的解决方案(仅限安装了visual assist插件)
- 最大子数组二
- Linux第五周学习总结——扒开系统调用的三层皮(下
- 约瑟夫环问题——(Hdu-5643,King's Game)
- 设计模式学习笔记——单例模式
- 选夫婿1
- vector与list区别
- hdu 1712 ACboy needs your help(分组背包入门)
- 常见数据结构之JavaScript实现
- 想写一系列关于css draft的博客
- PHP记录 字符串 函数
- [BZOJ2843]极地旅行社(LCT)
- App架构经验总结
- hadoop源代码分析(二)从wordCount开始,剖析mapreduce的运行机制
- Spring容器中bean的生命周期以及关注spring bean对象的后置处理器:BeanPostProcessor(一个接口)
- 《Linux内核设计与实现》第十八章读书笔记
- PHP连接数据库实现注册页面的增删改查操作
- 1002 田忌赛马问题
- BZOJ 1201: [HNOI2005]数三角形
- 不敢死队问题