掃麵線 線段樹(hdu1542)

2022-03-25 19:32:03 字數 1459 閱讀 1962

之前寫過這個演算法,時間長了就忘掉了,,現在不看書自己努力回想起來,對演算法的理解,對線段樹的理解感覺也更深了一點(可能心理作用,哈哈哈)

思路簡單說一下吧

從做到右遍歷每一條矩陣的邊(左右邊),看該邊對右邊的面積貢獻是正還是負(矩陣左邊為正,右邊為負),在y軸上用線段樹維護在y軸的貢獻值,與x軸上該邊與下一條邊的差值相乘即可

1

定義控制台應用程式的入口點。2//

3 #include4 #include5 #include6 #include7 #include8 #include

9 #include10 #include11 #include

12 #include13 #include14 #include15 #include16

using

namespace

std;

17 typedef long

long

ll;18 typedef long

long

lint;

19const ll mod=1e9+7;20

const

int maxn=1e2+7;21

const

int maxm=1e5+7;22

const

double eps=1e-3;23

intar1[maxn],ar2[maxn],m,n;

24bool

bo[maxn];

25struct

lineli[maxn*2

];29

30struct

nodeno[maxn*8

];35

double

xl[maxn],yl[maxn];

36bool

cmp(line l1,line l2)

39void build(int x,int y,int

o)49

void down(int

x)54

else57}

58void update(int o,line &limid)

63else

68down(o);69}

70int

main()

7188 sort(li,li+2*n,cmp);

89 sort(yl,yl+2*n);

90int len=unique(yl,yl+2*n)-yl;

91 build(0,len-1,1

);92

double ans=0;93

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

97 printf("

test case #%d\ntotal explored area: %.2lf\n\n

",++fir,ans);98}

99return0;

100 }

hdu1542(線段樹 掃瞄線)

裸的掃瞄線,學習掃瞄線的題目。具體掃瞄線的原理我不講了,我是看大神們的部落格懂得,就算寫也沒大神屌。下面我給出我的 裡面的注釋是我認為比較重要的地方 include include include includeusing namespace std const int max 210 int n ...

hdu 1542 掃瞄線 線段樹

題目大意 求矩形面積的並 思路 按y軸排序,然後將x投影到線段樹上做乙個線段覆蓋問題即可 注意 為了避免重複,線段座標右端點是開區間,更新時需要加上1 include include include include include define fo i,a,b for int i a i b i ...

hdu1542(線段樹 掃瞄線)

題目連線 又看到了幾個月前做的題,感覺那時候就是個sb 也怪自己剛開始沒搞清楚線段樹,瞎摸索 用連續線段樹很好理解這個題,之前的 稍微改了一下就好理解多了 1 include2 include3 include4 define lson l,m,rt 1 5 define rson m,r,rt 1...