POI 2001 Goldmine 線段樹 掃瞄線

2022-05-22 14:45:12 字數 1187 閱讀 9541

題目鏈結

求平面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四個整數,表示被乙個工廠汙...