對於每個點,擴成乙個矩形,變成求最大重疊層數;
注意邊界的處理,這裡是橫縱均加一;
可能在邊界上會產生一些問題,在排序的時候修正;
#include#include#include#include#include#include#include#include#includeusing namespace std;
#define inf 0x3f3f3f3f
const int dir[4][2]=;
#define maxn 2005
struct tree
tree[maxn*4];
struct line
line[maxn];
bool cmp(line a,line b)//sort排序的函式
int y[maxn];//記錄y座標
void build(int l,int r,int root)
void calen(int root)
void update(int root,struct line e)
if(e.y2<=tree[root<<1].rf)update(root<<1,e);
else if(e.y1>=tree[root<<1|1].lf)update(root<<1|1,e);
else
calen(root);
}int main()
k--;
sort(line+1,line+k+1,cmp);
sort(y+1,y+k+1);
int mm;
mm=unique(y+1,y+1+k)-y-1;
build(1,mm,1);
int ans=0;
for(i=1;i<=k;i++)
printf("%d\n",ans);
} return 0;
}
hdu 1542 Atlantis(求矩形面積並)
分別記錄x座標和y座標,將其分別按照從左到有的方向排序。然後對於乙個輸入的矩形的x,y座標範圍內的下標進行標記。以兩個相鄰的座標為最小單位分割圖形,最後求總面積。include include include define n 205 int mark n n double a n b n stru...
hdu 2830 逐行掃瞄dp求最大完全矩形
求最大完全矩形的基本思想就是以每一行作為底,因為任意列可以呼叫,我們記錄當前行為底的時候以某乙個點的高度,然後排序,從大到小的排序,然後掃瞄到後面每乙個點的高度為矩形高度的最大矩形面積就是h i i 具體步驟如下 很好的思路 include include include include defin...
HDU 1255 覆蓋的面積(線段樹求矩形面積交)
題意 給出n個矩形,求出至少被兩塊矩形覆蓋的面積。思路 跟面積並類似的做法,不同的是每個節點要額外維護乙個至少被覆蓋兩次的長度dcnt,此外還是要維護至少覆蓋一次的長度cnt,然後每次由當前結點的cover標記和子節點的dcnt,cnt值來推出當前結點的dcnt,cnt值。include inclu...