bzoj4237 稻草人 cdq分治 單調棧

2022-02-27 10:48:10 字數 1013 閱讀 3048

bzoj4237: 稻草人

暴力統計是n^2的

考慮統計一段區間對另一端的貢獻

對於y值cdq分治,降調一維

對於當前兩個分治區間統計上面那部分對下面那部分的貢獻

對當前兩區間x排序後,對上部分維護單增單調棧,得到距離當前點最近的比她低的點p

對於下面的區間維護乙個上凸殼 ,直接在凸殼上二分p統計答案

#include#include#include#include#define gc getchar()

#define pc putchar

#define ll long long

inline int read()

void print(ll x)

if(x >= 10) print(x / 10);

pc(x % 10 + '0');

} const int maxn = 200007;

struct point po[maxn];

int n;

bool cmpx(point a,point b)

bool cmpy(point a,point b)

int tp,tl;

int sk[maxn],sk2[maxn];

ll ans = 0;

void solve(int l = 1,int r = n)

l = 1,r = tl;to = - 1;lim = po[sk[tp - 1]].x;

while(l <= r)

if(to != -1) ans += 1ll * tl - 1ll * to + 1;

} solve(l,mid); solve(mid + 1,r);

} int main()

po[0].x = po[0].y = -1;

solve();

print(ans);

pc('\n');

}

BZOJ4237 稻草人 CDQ分治

joi村有一片荒地,上面豎著n個稻草人,村民們每年多次在稻草人們的周圍舉行祭典。有一次,joi村的村長聽到了稻草人們的啟示,計畫在荒地中開墾一片田地。和啟示中的一樣,田地需要滿足以下條件 田地的形狀是邊平行於座標軸的長方形 左下角和右上角各有乙個稻草人 田地的內部 不包括邊界 沒有稻草人。給出每個稻...

bzoj 4237 稻草人 CDQ分治

time limit 40 sec memory limit 256 mb joi村有一片荒地,上面豎著n個稻草人,村民們每年多次在稻草人們的周圍舉行祭典。有一次,joi村的村長聽到了稻草人們的啟示,計畫在荒地中開墾一片田地。和啟示中的一樣,田地需要滿足以下條件 田地的形狀是邊平行於座標軸的長方形 ...

BZOJ 4237 稻草人 分治

分治。1.按y軸排序 2.分治處理 l,mid 和 mid 1,r 計算 l,mid 能對 mid 1,r 部分作出的貢獻 隨便花乙個圖發現上半部分維護y值遞增的單調棧下半部分維護y單調減得單調棧,這樣下半部分棧中元素都是可以和上半部分配對不會出現包括的情況,但是x座標必須大於s1 t1 1 就是第...