CQOI2010 內部白點

2022-05-10 21:54:12 字數 2048 閱讀 9450

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

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

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

40 2

2 0-2 0

0 -2

5資料範圍

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

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

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

首先不存在無解,且加的能加黑點就是原圖的內部白點

列舉每一條豎線(x相同)

顯然豎線分成幾段

如果一段中存在左右都有點的y,那麼答案+1

用樹狀陣列維護這個區間內滿足條件的點數

令$l_i$為縱座標為i,左邊有多少點,$r_i$類似

如果$l[y]=0$那麼y之後就可以構成乙個答案+1

如果$r[y]=1$那麼y之後就不再構成答案-1

然後區間求和[a[i-1].y+1,a[i].y-1](黑點不能變成黑點)

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7 typedef long

long

lol;

8struct

zyys

9a[800001

];12

int t[800001],num,l[800001],r[800001

],n;

13 lol c[800001

],ans;

14bool

cmp(zyys a,zyys b)

1519

void update(int

x,lol y)

2026

}27 lol query(int

x)28

35return

s;36}37

intmain()

38 45 sort(t+1,t+num+1

);46 num=unique(t+1,t+num+1)-t-1;47

for (i=1;i<=n;i++)

4852 sort(a+1,a+n+1

,cmp);

53for (i=1;i<=n;i++)

54 r[a[i].y]++;

55 ans=n;

56for (i=1;i<=n;i=ed)

5771

}72 cout73 }

#include

#include

#include

#include

#include

using namespace std;

typedef long long lol;

struct zyys

a[800001];

int t[800001],num,l[800001],r[800001],n;

lol c[800001],ans;

bool cmp(zyys a,zyys b)

sort(t+1,t+num+1);

num=unique(t+1,t+num+1)-t-1;

for (i=1;i<=n;i++)

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

for (i=1;i<=n;i++)

r[a[i].y]++;

ans=n;

for (i=1;i<=n;i=ed)

}cout<}

1818 Cqoi2010 內部白點

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

BZOJ1818 Cqoi2010 內部白點

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

bzoj1818 Cqoi2010 內部白點

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