在池塘裡用一張網(左下角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 分鐘單挑這個人,他...