hdu4325 樹狀陣列+離散化
http://acm.hdu.edu.cn/showproblem.php?pid=4325
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
2
1 1
5 10
4
2 3
1 4
4 8
1
4
6
Sample Output
Case #1:
0
Case #2:
1
2
1
/**
hdu 4325 樹狀陣列+離散化
題目大意:給定n朵花,每朵花開放的時間段,然後m個詢問:ti時間點有多少花正在盛開
解題思路:樹狀陣列裸體,不過要離散化花開放的時間
*/
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=300005;
int n,m,k;
int C[maxn],a[maxn];
struct note
{
int x,id;
bool operator <(const note &other)const
{
return x<other.x;
}
}p[maxn];
int lowbit(int i)
{
return i&(-i);
}
int sum(int x)
{
int cnt=0;
while(x>0)
{
cnt+=C[x];
x-=lowbit(x);
}
return cnt;
}
void update(int pos,int value)
{
while(pos<=k)
{
C[pos]+=value;
pos+=lowbit(pos);
}
}
int main()
{
int T,tt=0;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
int nn=n*2;
int mm=nn+m;
for(int i=0;i<mm;i++)
{
scanf("%d",&p[i].x);
p[i].id=i;
}
sort(p,p+mm);
k=1;
a[p[0].id]=k;
for(int i=1;i<mm;i++)
{
if(p[i].x==p[i-1].x)
{
a[p[i].id]=k;
}
else
a[p[i].id]=++k;
}
memset(C,0,sizeof(C));
for(int i=0;i<nn-1;i+=2)
{
update(a[i],1);
update(a[i+1]+1,-1);
}
printf("Case #%d:\n",++tt);
for(int i=nn;i<mm;i++)
{
printf("%d\n",sum(a[i]));
}
}
return 0;
}
相關文章
- HDU 5862 Counting Intersections(樹狀陣列+掃描線+離散化)陣列
- HDU4991 Ordered Subsequence (dp+樹狀陣列+離散化)陣列
- LeetCode 493. 翻轉對(歸併排序 || 離散化+樹狀陣列)LeetCode排序陣列
- Leetcode 327. 區間和的個數 (字首和 + 離散化 + 樹狀陣列)LeetCode陣列
- hdu 4368 樹狀陣列 離線維護陣列
- 樹狀陣列陣列
- hdu5489 ||2015合肥網路賽1006 dp+離散化樹狀陣列優化陣列優化
- SPOJ DQUERY (離線數狀陣列||線上主席樹)陣列
- 解析樹狀陣列陣列
- 樹狀陣列詳解陣列
- 樹狀陣列基礎陣列
- poj 2481 樹狀陣列陣列
- hdu 3874 樹狀陣列陣列
- 二維樹狀陣列陣列
- 樹狀陣列模板題 & (樹狀陣列 1:單點修改,區間查詢)陣列
- 【dp+離散化+線段樹優化】Paint優化AI
- 樹狀陣列和逆序對陣列
- hdu 5147 樹狀陣列陣列
- 樹狀陣列快速入門陣列
- 樹狀陣列模板+習題集陣列
- 樹狀陣列3種基本操作陣列
- 學習筆記----樹狀陣列筆記陣列
- 樹狀陣列upc1976陣列
- CSU 4441 Necklace (樹狀陣列/LIS)陣列
- 樹狀陣列(我是真小白)陣列
- 變化的區間樹狀陣列,單點查詢陣列
- 線段樹+差分——【模板】樹狀陣列2陣列
- hdu 4836 The Query on the Tree(線段樹or樹狀陣列)陣列
- 10:Challenge 3(樹狀陣列直接修改)陣列
- POJ 3928 Ping pong(樹狀陣列)陣列
- HDU 1556 Color the ball(線段樹|樹狀陣列)陣列
- CF 293 E Close Vertices (樹的分治+樹狀陣列)陣列
- HDU 1166 敵兵佈陣 (樹狀陣列)陣列
- HDU 1166 敵兵佈陣(樹狀陣列)陣列
- POJ-2352 Stars(樹狀陣列)陣列
- 【luogu3368】模板 樹狀陣列 2陣列
- 【二維樹狀陣列】poj 2155 Matrix陣列
- D 區間求和 [數學 樹狀陣列]陣列