hdu 4325 Flowers

Problem F

Time Limit: 4000/2000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 332    Accepted Submission(s): 143
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 S i and T i (1 <= S i <= T i <= 10^9), means i-th flower will be blooming at time [S i, T i].
In the next M lines, each line contains an integer T i, 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.
 
SampleInput
2

1 1

5 10

4

2 3

1 4

4 8

1

4

6
 
SampleOutput
Case #1:

0

Case #2:

1

2

1
//水水噢
//区间覆盖问题,求某个区间被覆盖几次
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #define N 100000 #define lson l,m,k<<1 #define rson m+1,r,k<<1|1 using namespace std; int st[N<<2]; void build(int l,int r,int k) { st[k]=0; if(l==r) return; int m=(l+r)>>1; build(lson); build(rson); } void update(int &L,int &R,int l,int r,int k) { if(L<=l&&R>=r) { st[k]+=1; return ; } int m=(l+r)>>1; if(L<=m) update(L,R,lson); if(R>m) update(L,R,rson); } void query(int &i,int l,int r,int k) { if(l==r) { printf("%d\n",st[k]); return; } if(st[k]) { st[k<<1]+=st[k]; st[k<<1|1]+=st[k]; st[k]=0; } int m=(l+r)>>1; if(i<=m) query(i,lson); else query(i,rson); } int main() { int T,t=1; int i,n,m; int s,e; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); build(1,N,1); printf("Case #%d:\n",t++); for(i=1;i<=n;i++) { scanf("%d%d",&s,&e); update(s,e,1,N,1); } while(m--) { scanf("%d",&s); query(s,1,N,1); } } return 0; }

你可能感兴趣的:(HDU)