題目鏈結
求平面n個點(n<=15000),用乙個 長寬為 s w的矩陣去套,能套到的最多的點數,在邊上的點也算
其實跟之前矩形巢狀求面積類似 (poj的atlantic)用類似掃瞄線的做法,把點當做邊 (y 到 y值+w),插入線段樹,這樣就維護了y方向,x方向就用類似佇列維護,
在距離大於s的時候,就彈出前面的(即線段樹移除那條邊),一邊新增當前邊
維護乙個值,看從前掃到後,邊層數累積的最多的時候即可。
一開始還以為要維護覆蓋值,後來發現沒用,直接乙個d維護積累層數即可。
一開始輸入那裡沒寫好eof,re了幾次,不知道什麼原因,改完之後1a
#include #include #include #include #define lson rt<<1,l,mid#define rson rt<<1|1,mid+1,r
using namespace std;
const int n = 100020;
//int cover[n<<2];
int flag[n<<2];
int d[n<<2];
int s,w,n,maxn;
struct node
void pushdown(int rt,int l,int r)
void up(int rt)
void remove(int l,int r,int rt,int l,int r)
pushdown(rt,l,r);
int mid=(l+r)>>1;
if (l<=mid) remove(l,r,lson);
if (r>mid) remove(l,r,rson);
up(rt);
}void inserts(int l,int r,int rt,int l,int r)
pushdown(rt,l,r);
int mid=(l+r)>>1;
if (l<=mid) inserts(l,r,lson);
if (r>mid) inserts(l,r,rson);
up(rt);
}int main()
inserts(point[i].y,point[i].y+w,1,0,maxn);
ans=max(ans,d[1]);
}printf("%d\n",ans);
}}
ACM 251 POI2001 區間 掃瞄
輸入檔案 prz.in輸出檔案 prz.out簡單對比 時間限制 1 s 記憶體限制 128 mb 有一些閉區間 ai,bi i 1 2 n 找出區間數最少的表示方案,並按遞增的順序定稿輸出檔案。當a b c d時,我們說區間 a,b 和 c,d 為遞增順序。任務 你的任務是編寫乙個程式完成下列工作...
線段樹 掃瞄線
pku 1151 hdu1542 atlantis 矩形面積並 題意 給出n個矩形,每個矩形給出左下角座標,右上角座標。然後求矩形並的總面積 思路 浮點數先要離散化 然後把矩形分成兩條邊,上邊和下邊,對橫軸建樹,然後從下到上掃瞄上去,用cnt表示該區間下邊比上邊多幾個,sum代表該區間內被覆蓋的線段...
掃瞄線 線段樹
問題描述 小明的家旁邊有條河流,但最近,周圍的三個工廠開始向這條河排放汙水,這條河的一部分被汙染了,被乙個工廠汙染的部分可以看做乙個矩形,現在小明想知道這條河被汙染的面積是多少。輸入 第一行乙個整數t,表示有多少組資料,之後每一組資料報括三行,每一行有lx,ly,rx,ry四個整數,表示被乙個工廠汙...