Flowers(二分水过。。。)
2015-11-14 21:25
211 查看
Flowers
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2579 Accepted Submission(s): 1265
[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
题解:类似颜色段那题,突发奇想,二分搞了搞,upper,lower那错了半天,想了一组数据才发现问题;
代码:
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using namespace std; const int INF=0x3f3f3f3f; const double PI=acos(-1); #define mem(x,y) memset(x,y,sizeof(x)) const int MAXN=1e5+100; int s[MAXN],e[MAXN]; int main(){ int t,M,N,flot=0; scanf("%d",&t); while(t--){ scanf("%d%d",&N,&M); for(int i=0;i<N;i++){ scanf("%d%d",&s[i],&e[i]); } sort(s,s+N);sort(e,e+N); int q; printf("Case #%d:\n",++flot); // for(int i=0;i<N;i++)printf("%d ",s[i]);puts(""); // for(int i=0;i<N;i++)printf("%d ",e[i]);puts(""); while(M--){ scanf("%d",&q); int x=upper_bound(s,s+N,q)-s; int y=lower_bound(e,e+N,q)-e; //printf("%d %d\n",x,y); // if(e[y-1]==q)y--; // if(s[x]==q)x++; printf("%d\n",x-y); } } return 0; }
相关文章推荐
- BC-Clarke and five-pointed star(水)
- apps被拒绝的各种理由以及翻译
- 选择排序原理及代码实现
- Maven发布web项目到tomcat
- (5)Oracle基础--约束
- python 调试
- Android(3)——App Resources
- 二叉树遍历
- 动手动脑接口与继承
- 解决Linux关闭终端(关闭SSH等)后运行的程序或者服务自动停止【后台运行程序】
- hdu 5556 Land of Farms(二分图匹配)
- 手脱EXE32Pack v1.39
- [证书]2、一个苹果证书怎么多次使用——导出p12文件
- 从产品经理的角度算一算:做一个App需要多少钱?
- 九度OJ 1333:考研海报 (区间操作)
- 九度OJ 1333:考研海报 (区间操作)
- 用Rufus来制作Windows10的U盘安装盘
- Android 组合控件
- JSON与XML的区别比较
- Codeforces Round #276 (Div. 1) A. Bits 贪心