JZOJ 4694 火神的魚

2021-07-22 09:28:45 字數 2390 閱讀 2538

在池塘裡用一張網(左下角x1,y1,右上角x2,y2)捕魚,網和池塘都是乙個矩形,池塘裡有n條魚,這些魚會四處游動,火神會在魚游動的間隙問你現在網裡有多少條魚。

魚的游動可以概括為兩個動作:

1 l r d : 表示標號在[l,r]這個區間內的魚向x軸正方向游動了d個單位長度。

2 l r d:表示標號在[l,r]這個區間內的魚向y軸正方向游動了d個單位長度。

多組資料。

t<=10,n,m<=30000,0<=d<=1e9,所有涉及的座標在[−10^9,10^9]範圍內。

時間限制 1s

空間限制 256m

建兩棵線段樹,由於d是正數,所以從網裡面鑽出來的魚不可能再進去,所以我們可以用線段樹上區間[l,r]儲存的資訊是:

(以x軸上的線段樹為例)

1、標號為[l,r]的魚中有多少條;

2、標號為[l,r]的魚中座標小於x1的最大座標;

3、標號為[l,r]的魚中座標在[x1,x2]範圍內的最大座標;

於是魚的游動就可以用區間加減解決,加減之後就維護上述的第

二、三項,及時把座標脫離範圍的魚加入或移出網外就可以了。

#include

#include

#include

#define maxn 100006

#define fr(i,a,b) for(i=a;i<=b;i++)

using namespace std

;typedef long long ll;

const ll ding=2147483647

;struct nod

tr1[maxn*3],tr2[maxn*3];

int t,i,n,m,x1,x2,y1,y2,z,l,r,d,s,a[maxn],b[maxn];

void merge(int v)

void maket(int v,int st,int en)

int m=(st+en) >> 1

; maket(v+v,st,m);

maket(v+v+1,m+1,en);

merge(v);

return;

}void update1(int v)

void update2(int v)

void modify1(int v,int st,int en,int l,int r,int x)

update1(v);

update2(v);

int m=(st+en) >> 1

; if (r<=m) modify1(v+v,st,m,l,r,x);

else if (l>m) modify1(v+v+1,m+1,en,l,r,x);

else

merge(v);

return;

}void modify2(int v,int st,int en,int l,int r,int x)

update1(v);

update2(v);

int m=(st+en) >> 1

; if (r<=m) modify2(v+v,st,m,l,r,x);

else if (l>m) modify2(v+v+1,m+1,en,l,r,x);

else

merge(v);

return;

}void add(int v,int st,int en,int x)

else

return;

}update1(v);

update2(v);

int m=(st+en) >> 1

; if (x==1)

else

merge(v);

return;

}void del(int v,int st,int en,int x)

update1(v);

update2(v);

int m=(st+en) >> 1

; if (x==1)

else

merge(v);

return;

}void findd(int v,int st,int en,int l,int r)

update1(v);

update2(v);

int m=(st+en) >> 1

; if (r<=m) findd(v+v,st,m,l,r);

else if (l>m) findd(v+v+1,m+1,en,l,r);

else

merge(v);

return;

}int main()

else if (z==2)

} else}}

return 0

;}

HDU5283 JZOJ4694 火神的魚

description 火神最愛的就是吃魚了,所以某一天他來到了乙個池塘邊捕魚。池塘可以看成乙個二維的平面,而他的漁網可以看成乙個與座標軸平行的矩形。池塘裡的魚不停地在水中游動,可以看成一些點。有的時候會有魚游進漁網,有的時候也會有魚游出漁網。所以火神不知道什麼時候收網才可以抓住最多的魚,現在他尋求...

HDU5283 JZOJ4694 火神的魚

火神最愛的就是吃魚了,所以某一天他來到了乙個池塘邊捕魚。池塘可以看成乙個二維的平面,而他的漁網可以看成乙個與座標軸平行的矩形。池塘裡的魚不停地在水中游動,可以看成一些點。有的時候會有魚游進漁網,有的時候也會有魚游出漁網。所以火神不知道什麼時候收網才可以抓住最多的魚,現在他尋求你的幫助。他對池塘裡的每...

4631 瘋狂的火神

描述 火神為了檢驗 zone 的力量,他決定單挑 n nn 個人。由於火神訓練時間有限,最多只有 t tt 分鐘,所以他可以選擇一部分人來單挑,由於有小 y 的幫助,他得到了每個人特定的價值,每個人的價值由乙個三元組 a,b,c a,b,c a,b,c 組成,表示如果火神在第 x 分鐘單挑這個人,他...