Luogu 1502 視窗的星星 題解 掃瞄線

2022-05-12 12:01:20 字數 1209 閱讀 3850

其實一眼看不出掃瞄線。

我們可以把每乙個點都變成乙個長寬為w和h的矩形。

左邊的邊是+w,右邊的邊是-w。

線段樹維護區間max和lazy tag。

然後掃瞄線求max。

**如下:

#include#define ll long long

using

namespace

std;

const

int maxn=20010

;int n,w,h,t,b[maxn<<1

],tot;

struct

nodetree[maxn

<<2

];struct

s s(

int xx,int yy1,int yy2,int ff)

}e[maxn

<<1

];inline

bool

cmp(s x,s y)

inline

void pushdown(int p,int l,int

r) tag(p)=0;}

inline

void add(int p,int l,int r,int x,int y,int

d)

int mid=(l+r)>>1

;

if(x<=mid) add(p<<1

,l,mid,x,y,d);

if(y>mid) add(p<<1|1,mid+1

,r,x,y,d);

pushdown(p

<<1

,l,mid);

pushdown(p

<<1|1,mid+1

,r);

mx(p)=max(mx(p<<1),mx(p<<1|1

));}

intmain()

sort(b+1,b+1+2*n);

tot=unique(b+1,b+1+2*n)-b-1

; sort(e+1,e+1+2*n,cmp);

ll ans=0

;

for(int i=1;i<=2*n;i++)

for(int i=1;i<=2*n;i++)

printf(

"%lld\n

",ans);

}return0;

}

P1502 視窗的星星

這道題還耗了我很久的時間,因為不懂得掃瞄線到底要怎麼做而一直翻了很多dalao的題解。這道題求的是乙個指定大小的矩形可以框住多少顆星星,他們的亮度總和最大。直接移動矩形不可行,我們將每顆星星轉換為每顆星星能被矩形框住的響應區域,不難發現也是矩形。為了不重複計算,我們只考慮在右上區域框住星星,不然會算...

P1502 視窗的星星(掃瞄線入門第一題)

提交2.78k 通過682 時間限制1.00s 記憶體限制125.00mb 提交 加入收藏 題目提供者cyrcyr 難度省選 noi 歷史分數100 提交記錄 檢視題解 高效能高階資料結構 檢視演算法標籤 進入討論版 檢視討論 檢視推薦 展開小卡買到了一套新房子,他十分的高興,在房間裡轉來轉去。晚上...

藍橋杯模擬題 天上的星星(字首和)

題目描述在乙個星光摧殘的夜晚,蒜頭君一顆一顆的數這天上的星星。蒜頭君給在天上巧妙的畫了乙個直角座標系,讓所有的星星都分布在第一象。天上有 nn 顆星星,他能知道每一顆星星的座標和亮度。現在,蒜頭君問自己 qq 次,每次他問自己每個矩形區域的星星的亮度和是多少 包含邊界上的星星 輸入格式第一行輸入乙個...