HDU6447(離散化掃瞄線 樹狀陣列)

2022-02-27 15:05:38 字數 1625 閱讀 7593

一眼看過去就x排序掃瞄一下,y是1e9的離散化一下,每層用樹狀陣列維護一下,然後像dp倒著迴圈似的樹狀陣列就用y倒著插就可行了。

類似題目練習:bzoj4653、bzoj1218

1

#pragma comment(linker, "/stack:1024000000,1024000000")

2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include

13 #include 14 #include 15 #include 16 #include

17 #include 18 #include 19 #include 20 #include 21 #include 22

#define init(a, b) memset(a, b, sizeof(a))

23#define rep(i, a, b) for (int i = a; i <= b; i++)

24#define irep(i, a, b) for (int i = a; i >= b; i--)

25using

namespace

std;

2627 typedef double

db;28 typedef long

long

ll;29 typedef unsigned long

long

ull;

30 typedef pairp;

31const

int inf = 0x3f3f3f3f;32

const ll inf =1e18;

3334 template void read(t &x)

4344 template void

write(t x)

4950 template void

writeln(t x)

5455

const

int maxn = 1e5 + 5;56

intt, n;

57struct

cord

64}a[maxn];

65int

yy[maxn], tot;

66struct

bit

7374

int query(int

pos)

80}bit;

8182

intmain()

91 sort(yy + 1, yy + 1 +tot);

92 tot = unique(yy + 1, yy + 1 + tot) - yy - 1

;93 rep(i, 1

, n)

9697 sort(a + 1, a + 1 +n);

98 init(bit.f, 0

);99 rep(i, 1

, n)

102writeln(bit.query(tot));

103}

104return0;

105 }

HDU 1542 線段樹 離散化 掃瞄線

題意 給你n個矩形的左上角頂點與右下角頂點,求 n個矩形的面積和 可能重疊,重疊的部分只算一次 思路 掃瞄線模版題。關於掃瞄線建議看這個部落格 還有乙個比較重要的問題,一般的線段樹以及我們的區間修改合併,都有乙個共同點,就是不會出現區間缺失的現象,什麼叫區間缺失,顧名思義,區間缺失就是缺少一些區間沒...

HDU 1255 掃瞄線求面積 離散化

給定平面上若干矩形,求出被這些矩形覆蓋過至少兩次的區域的面積.input 輸入資料的第一行是乙個正整數t 1 t 100 代表測試資料的數量.每個測試資料的第一行是乙個正整數n 1 n 1000 代表矩形的數量,然後是n行資料,每一行包含四個浮點數,代表平面上的乙個矩形的左上角座標和右下角座標,矩形...

hdu1542線段樹(掃瞄線 離散化)

題目鏈結 要求矩形的面積並 不複雜,主要要理解掃瞄線的思想以及一些細節的處理。首先需要將接收到的x座標離散化,方法就是排序去重。接下來的線段樹建立在這個 關於x座標的陣列上,這很關鍵。線段樹的節點代表一段區間,這個區間是由x座標陣列的下標 來構成的。更新的時候就根據水平線段的左右x座標獲得區間,然後...