hdu4533 威威貓系列故事 曬被子

2022-04-18 16:20:59 字數 2425 閱讀 5544

problem description

因為馬拉松初賽中吃雞腿的題目讓不少人抱憾而歸,威威貓一直覺得愧對大家,這幾天他悄悄搬到直角座標系裡去住了。

生活還要繼續,太陽也照常公升起,今天,威威貓在第一象限曬了n條矩形的被子,被子的每條邊都和座標軸平行,不同被子的某些部分可能會疊在一起。這時候,在原點處突然發了場洪水,時間t的時候,洪水會蔓延到( t, t ),即左下角為( 0, 0 ) ,右上角為( t, t )的矩形內都有水。

悲劇的威威貓想知道,在時間t1, t2, t3 ... tx 的時候,他有多少面積的被子是溼的?

input

輸入資料首先包含乙個正整數t,表示有t組測試資料;

每組資料的第一行首先是乙個整數n,表示有n條被子;

接下來n行,每行包含四個整數x1, y1, x2, y2,代表一條被子的左下角和右上角的座標;

然後接下來一行輸入乙個整數x,表示有x次詢問;

再接下來x行,輸入x個嚴格單調遞增的整數,每行乙個,表示威威貓想知道的時間ti。

[technical specification]

t <= 5

0 < n <= 20000

1 <= x1 < x2 <= 200000

1 <= y1 < y2 <= 200000

1 <= x <= 20000

1 <= ti <= 200000 (1 <= i <= x )

output

對於每次詢問,請計算並輸出ti時有多少面積的被子是溼的,每個輸出佔一行。

sample input

1

21 1 3 3

2 2 4 451

2345

sample output

015

88這題裡求的面積是各個矩形的面積和,並不是矩形面積的並,即相互不影響,因為對於各個時段,矩形的面積都可以用a*t^2+b*t+c表示,所以我們可以用樹狀陣列或者線段樹分別維護a,b,c,每次讀入乙個矩形,就記錄它對不同時間段t的影響,然後把相應的係數加到線段樹中。

當乙個矩形讀入時(左下角座標(x1,y1),右上角座標(x2,y2)),有四種影響情況:

1.0~max(x1,y1) 這個時期因為t時間形成的矩形在該矩形下面,對面積沒有影響,所以不用考慮。

2.如果存在t時間形成的矩形部分覆蓋該矩形,但沒有碰到或者超過該矩形的上邊或者右邊,那麼要同時更新a,b,c,表示式為(t-x1)*(t-y1)。這裡的判斷表示式為如果(max(x1,y1)3.t時間內形成的矩形恰好碰到或者越過右邊或上邊的一條,即這段時間內的矩形面積變化中(x2-x1)或(y2-y1)為常數,那麼要更新,注意,這裡更新的時候要分類討論,具體看**。

4.max(x2,y2)~maxn,這個時期因為t時間形成的矩形已經完全覆蓋矩形,所以要更新c,加上面積常數。

寫線段樹的時候注意,三個變數要一起存,不能開三個線段樹,會超記憶體的。

線段樹**:

#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define ll __int64

#define maxn 200050

ll a,b,c;

ll a[10];

struct nodeb[4*maxn];

void build(ll l,ll r,ll i)

void update(ll l,ll r,ll a,ll i)

mid=(b[i].l+b[i].r)/2;

if(r<=mid)update(l,r,a,i*2);

else if(l>mid)update(l,r,a,i*2+1);

else

}void question(ll id,ll i)

if(b[i].cnt1)

if(b[i].cnt2)

if(b[i].cnt3)

mid=(b[i].l+b[i].r)/2;

if(id<=mid)question(id,i*2);

else question(id,i*2+1);

}int main()

ll min(ll a,ll b)

return ans;

}}a,b,c;

void fun(ll l,ll r,ll num1,ll num2,ll num3)

int main()

{

int t;

scanf("%d",&t);

while(t--)

{ a.clear(); b.clear(); c.clear();

int n,m;

scanf("%d",&n);

for(int i=0;i

HDU 威威貓系列故事 籃球夢

威威貓十分迷戀籃球比賽,是忠實的nba球迷,他常常幻想自己那肥碩的身軀也能飛起扣籃。另外,他對籃球教練工作也情有獨鍾,特別是對比賽的戰術,投籃選擇方面也是很有研究,下面就是威威貓研究過的乙個問題 一場nba籃球比賽總共48分鐘,假如我們現在已經知道當前比分 a b,a代表我方的比分,b代表對方的比分...

HDU 威威貓系列故事 籃球夢

problem description 威威貓十分迷戀籃球比賽,是忠實的nba球迷,他常常幻想自己那肥碩的身軀也能飛起扣籃。另外,他對籃球教練工作也情有獨鍾,特別是對比賽的戰術,投籃選擇方面也是很有研究,下面就是威威貓研究過的乙個問題 一場nba籃球比賽總共48分鐘,假如我們現在已經知道當前比分 a...

威威貓系列故事 打地鼠

a 威威貓系列故事 打地鼠 submit status practice hdu 4540 description 威威貓最近不務正業,每天沉迷於遊戲 打地鼠 每當朋友們勸他別太著迷遊戲,應該好好工作的時候,他總是說,我是威威貓,貓打老鼠就是我的工作!無話可說.我們知道,打地鼠是一款經典小遊戲,規則...