B1818 Cqoi2010 內部白點 樹狀陣列

2022-03-13 05:22:33 字數 2072 閱讀 4727

這個題的想法很好想,就是進行排序之後直接檢查每個點的上下左右是否有黑點就行.但是直接列舉顯然不行,那怎麼辦呢?我們就用樹狀陣列維護掃瞄線,把每排左右點看成一條線覆蓋,然後從下往上掃,遇到下加一,遇到上減一併記錄答案.這樣用掃瞄線維護就行了.

題幹:

description

無限大正方形網格裡有n個黑色的頂點,所有其他頂點都是白色的(網格的頂點即座標為整數的點,又稱整點)。每秒鐘,所有內部白點同時變黑,直到不存在內部白點為止。你的任務是統計最後網格中的黑點個數。 內部白點的定義:乙個白色的整點p(x,y)是內部白點當且僅當p在水平線的左邊和右邊各至少有乙個黑點(即存在x1

< x < x2使得(x1,y)和(x2,y)都是黑點),且在豎直線的上邊和下邊各至少有乙個黑點(即存在y1 < y input

輸入第一行包含乙個整數n,即初始黑點個數。以下n行每行包含兩個整數(x,y),即乙個黑點的座標。沒有兩個黑點的座標相同,座標的絕對值均不超過109。

output

輸出僅一行,包含黑點的最終數目。如果變色過程永不終止,輸出-1

。sample input40

220-2

00 -2

sample output

5資料範圍

36%的資料滿足:n < = 500

64%的資料滿足:n < = 30000

100%的資料滿足:n < = 100000

**:

#include#include

#include

#include

#include

#include

#include

using

namespace

std;

#define duke(i,a,n) for(int i = a;i <= n;i++)

#define lv(i,a,n) for(int i = a;i >= n;i--)

#define clean(a) memset(a,0,sizeof(a))

const

int inf = 1

<< 30

;typedef

long

long

ll;typedef

double

db;template

void read(t &x)

template

void

write(t x)

struct

point

a[100010

];struct

segs[

1000010

];int

n;int hsh[100010],cnt = 0

;int tr[100010],ans = 0

;bool

cmp1(point a,point b)

bool

cmp2(point a,point b)

bool

c***(seg a,seg b)

int find(intx)}

void insert(int k,int l,int r,int

t)

else

}int lowbit(int

x)void

build()

sort(a + 1,a + n + 1

,cmp2);

duke(i,

2,n)

}void update(int x,inty)}

int ask(int

x)

returns;}

void

work()

}int

main()

sort(hsh + 1,hsh + n + 1

); build();

sort(s + 1,s + cnt + 1

,c***);

work();

printf(

"%d\n

",ans +n);

return0;

}/*40 2

2 0-2 0

0 -2

*/

1818 Cqoi2010 內部白點

題目真坑。明顯不可能會出現 1的情況嘛 離散化 樹狀陣列 x,y座標分別排序,掃一遍,找出所有的橫線和豎線,統計出橫線 豎線上端點 豎線下端點。對統計出的資料進行排序,關鍵字為y,當y值相同時,下端點優先於橫線優先於上端點。從上往下依次掃瞄,掃到橫線時統計橫線左右端點內 開區間 的豎線數量,掃到豎線...

BZOJ1818 Cqoi2010 內部白點

給定平面上的一些黑點,其它位置都是白點,乙個白點如果上下左右都有黑點就會變成黑點,求最終會有多少個黑點 就是求交點個數 離散化後,取出所有線段,然後沿任意乙個軸朝著乙個方向掃,然後把平行於另乙個軸的線段用端點記錄,掃到一端就在樹狀陣列裡 1,另一端 1,樹狀陣列求個區間和貢獻答案即可 const m...

bzoj1818 Cqoi2010 內部白點

description 無限大正方形網格裡有n個黑色的頂點,所有其他頂點都是白色的 網格的頂點即座標為整數的點,又稱整點 每秒鐘,所有內部白點同時變黑,直到不存在內部白點為止。你的任務是統計最後網格中的黑點個數。內部白點的定義 乙個白色的整點p x,y 是內部白點當且僅當p在水平線的左邊和右邊各至少...