HDU5283 JZOJ4694 火神的魚

2021-09-26 14:21:33 字數 2231 閱讀 2417

火神最愛的就是吃魚了,所以某一天他來到了乙個池塘邊捕魚。池塘可以看成乙個二維的平面,而他的漁網可以看成乙個與座標軸平行的矩形。

池塘裡的魚不停地在水中游動,可以看成一些點。有的時候會有魚游進漁網,有的時候也會有魚游出漁網。所以火神不知道什麼時候收網才可以抓住最多的魚,現在他尋求你的幫助。

他對池塘裡的每條魚都給予了乙個標號,分別從\(1\)到\(n\)標號,\(n\)表示池塘裡魚的總數。魚的游動可以概括為兩個動作:

\(1\)

\(l\)

\(r\)

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

\(2\)

\(l\)

\(r\)

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

在某些時刻火神會詢問你現在有多少條他關心的魚在漁網內(邊界上的也算),請你來幫助他吧。

好像不好下手,樹套樹?

誒!\(d\)值為正,這說明魚只能向正方向遊,那麼每條魚至多進去漁網一次,出來一次。

這樣就可以用線段樹維護了。

我們對於橫座標和縱座標分別開一顆線段樹,維護兩個值,分別是沒有進入漁網的最大橫座標(或縱座標),在漁網內的最大橫座標(或縱座標),還有區間的答案。

於是就很好維護了,對於每次修改,我們暴力把每個跳進漁網(或跳出漁網)的位置單點修改再重構,由於每個點至多跳進一次跳出一次,所以時間複雜度上是保證的。

\(code\):

#include#include#include#define fo(i,j,k) for(int i=j;i<=k;i++)

#define fd(i,j,k) for(int i=j;i>=k;i--)

#define n 100001

#define inf 2147483647

using namespace std;

int a[n],b[n];

int x1,y1,x2,y2;

struct nodetx[n*4],ty[n*4];

void hb(int v,int l,int r)

void build(int v,int l,int r)

int mid=(l+r)/2;

build(v*2,l,mid);

build(v*2+1,mid+1,r);

hb(v,l,r);

}void put1(int v,int l,int r)

void put2(int v,int l,int r)

void change1(int v,int l,int r,int x,int y,int z)

put1(v,l,r);

put2(v,l,r);

int mid=(l+r)/2;

if(y<=mid) change1(v*2,l,mid,x,y,z);

else if(x>mid) change1(v*2+1,mid+1,r,x,y,z);

else

hb(v,l,r);

}void change2(int v,int l,int r,int x,int y,int z)

put1(v,l,r);

put2(v,l,r);

int mid=(l+r)/2;

if(y<=mid) change2(v*2,l,mid,x,y,z);

else if(x>mid) change2(v*2+1,mid+1,r,x,y,z);

else

hb(v,l,r);

}int find(int v,int l,int r,int x,int y)

void del(int v,int l,int r,int op)

put1(v,l,r);

put2(v,l,r);

int mid=(l+r)/2;

if(op==1)

else

hb(v,l,r);

}void add(int v,int l,int r,int op)

else

return;

}put1(v,l,r);

put2(v,l,r);

int mid=(l+r)/2;

if(op==1)

else

hb(v,l,r);

}int main()

else if(q==2)

else}}

}

HDU5283 JZOJ4694 火神的魚

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

JZOJ8月4日提高組反思

被一堆2018 2019 2020的巨佬暴打 又是愉快的爆0的一天呢 看了看題 沒想法暴力走起 求個質因數呀,二分呀 然後就炸了 正解預處理加二分 反思 對於輸出乙個數的,可以考慮預處理 還是暴力 也還是掛掉了 考試的時候想的是暴力遍歷每個區間然後統計答案 就炸了正解是線段樹 但是!水法 暴力 剪枝...

HDU 1568 Fibonacci 大數前4位

自 分析 x 1234567.求其前四位數 log10 x log10 1.234567 6.所以1.234567 10 log10 x 6 1234 int 10 log10 x 6 1000.6 length 4,length int log10 x 1 同時我們知道 對於小於10000的數字可...