hdoj4325Flowers【线段树+离散化】
来源:互联网 发布:mac qq和pc qq同时登录 编辑:程序博客网 时间:2024/04/28 18:23
Flowers
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2603 Accepted Submission(s): 1281
Problem Description
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.
Input
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.
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.
Output
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.
Sample outputs are available for more details.
Sample Input
21 15 1042 31 44 8146
Sample Output
Case #1:0Case #2:121
Author
BJTU
Source
2012 Multi-University Training Contest 3
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define inf 0x3f3f3f3fusing namespace std;const int maxn=1000010;int q[maxn];int sum[maxn<<2];int num[maxn<<1];struct Node{int s,e;}A[100010];int ans;bool cmp(int a,int b){return a<b;}int BS(int k,int n){int l=1,r=n;while(l<=r){int mid=(l+r)>>1;if(k==num[mid])return mid;else if(k<num[mid])r=mid-1;else l=mid+1;}}void update(int left,int right,int l,int r,int rt){if(left<=l&&r<=right){sum[rt]++;return ;}int mid=(l+r)>>1;if(left<=mid)update(left,right,lson);if(mid<right)update(left,right,rson);}void query(int pos,int l,int r,int rt){ans+=sum[rt];if(l==r)return;int mid=(l+r)>>1;if(pos<=mid)return query(pos,lson);else return query(pos,rson);}int main(){int n,m,i,j,k,t,test=1;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);int cnt=1;for(i=0;i<n;++i){scanf("%d%d",&A[i].s,&A[i].e);num[cnt++]=A[i].s;num[cnt++]=A[i].e;}for(i=0;i<m;++i){scanf("%d",&q[i]);num[cnt++]=q[i];}sort(num,num+cnt,cmp);k=1;for(i=2;i<cnt;++i){if(num[i]!=num[i-1])num[++k]=num[i];}memset(sum,0,sizeof(sum));for(i=0;i<n;++i){int l=BS(A[i].s,k);int r=BS(A[i].e,k);update(l,r,1,k,1);}printf("Case #%d:\n",test++);for(i=0;i<m;++i){int pos=BS(q[i],k);ans=0;query(pos,1,k,1);printf("%d\n",ans);}}return 0;}
1 0
- hdoj4325Flowers【线段树+离散化】
- 线段树+离散化
- 离散化 + 线段树
- 线段树离散化
- 线段树离散化
- POJ_2528 线段树+离散化
- HDU3577 离散化+线段树
- poj2528 线段树+离散化
- poj2528线段树+离散化
- hdu4325线段树+离散化
- POJ2528 离散化线段树
- 【线段树+离散化】Cover
- poj2482 离散化+线段树
- poj2528_线段树+离散化
- poj1151(线段树+离散化)
- hdu3743(线段树+离散化)
- 数据离散化 & 线段树
- poj2528(线段树+离散化)
- Mac编程之用户界面
- 组合/聚合复用原则(CARP)
- 数据库——知识总结
- C语言的队列的初始化和先进先出的简洁程序
- SysManagerServiceImpl
- hdoj4325Flowers【线段树+离散化】
- lightOJ 1082 - Array Queries 【线段树(求最小值)】
- GreenPlum操作
- hdoj 1420 Prepared for New Acmer 【快速幂】
- 一颗名叫哈夫曼的树
- 1034. Head of a Gang (30)
- 如何在单文档程序中实现TAB键功能
- 翻译作品js
- leetcode之数组指定位置间的数之和