BZOJ 4237 稻草人 分治

2021-07-26 19:10:48 字數 692 閱讀 5513

分治。

1.按y軸排序

2.分治處理(l,mid)和(mid+1,r),計算(l,mid)能對(mid+1,r)部分作出的貢獻

隨便花乙個圖發現上半部分維護y值遞增的單調棧下半部分維護y單調減得單調棧,這樣下半部分棧中元素都是可以和上半部分配對不會出現包括的情況,但是x座標必須大於s1[t1-1]就是第乙個上半部分比當前列舉的這個座標的y座標小的座標的x值大。

#include#include#include#include#define maxn 200021

using namespace std;

int n,s1[maxn],s2[maxn],t1,t2;

long long ans;

struct dataans+=(long long)t2-l;

}void solve(int l,int r)

update();

} int p1=l,p2=mid+1;

for(int i=l;i<=r;i++)

for(int i=l;i<=r;i++)a[i]=t[i];

}int main(){

scanf("%d",&n);

for(int i=1;i<=n;i++)scanf("%d%d",&a[i].x,&a[i].y);

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

solve(1,n);cout<

bzoj4237 稻草人 分治

題目 分治 先把所有點按 y 排序,然後二分遞迴 對於每個 mid 計算經過它的矩形的個數,把上面的每個點當做右上角,考慮下面多少點可以作為左下角 上面的限制只有前面的 y 大於等於自己的 y,所以維護遞增的單調棧 下面的限制是後面的 y 小於等於自己的 y,所以維護遞減的單調棧 還要注意 x 的限...

BZOJ4237 稻草人 CDQ分治

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

bzoj 4237 稻草人 CDQ分治

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