BZOJ4237 稻草人 cdq分治 單調棧

2022-08-14 01:42:17 字數 1476 閱讀 9753

time limit: 40 sec  memory limit: 256 mb

submit: 1340  solved: 589

[submit][status][discuss]

joi村有一片荒地,上面豎著n個稻草人,村民們每年多次在稻草人們的周圍舉行祭典。

有一次,joi村的村長聽到了稻草人們的啟示,計畫在荒地中開墾一片田地。和啟示中的一樣,田地需要滿足以下條件:

田地的形狀是邊平行於座標軸的長方形;

左下角和右上角各有乙個稻草人;

田地的內部(不包括邊界)沒有稻草人。

給出每個稻草人的座標,請你求出有多少遵從啟示的田地的個數

第一行乙個正整數n,代表稻草人的個數

接下來n行,第i行(1<=i<=n)包含2個由空格分隔的整數xi和yi,表示第i個稻草人的座標

輸出一行乙個正整數,代表遵從啟示的田地的個數

40 0

2 23 4

4 33

所有滿足要求的田地由下圖所示:

1<=n<=2*10^5

0<=xi<=10^9(1<=i<=n)

0<=yi<=10^9(1<=i<=n)

xi(1<=i<=n)互不相同。

yi(1<=i<=n)互不相同。

joi 2013~2014 春季training合宿 競技3 by popoqqq

1 #include2 #include3 #include4 #include5 #include6 #include7

#define ll long long

8using

namespace

std;

9struct

data a[200005],sta2[200005],sta1[200005

];12

intn;

13bool cmp1(data t1,data t2)

14bool cmp2(data t1,data t2)

15 ll ans=0

,tot1,tot2;

16void cdq(int l,int

r) 30 ans+=(long

long)(tot2-(lower_bound(sta2+1,sta2+tot2+1,sta1[tot1-1],cmp2)-sta2)+1

);31}32

}33intmain() ;

35 scanf("

%d",&n);

36for(int i=1;i<=n;i++) scanf("

%d%d

",&a[i].x,&a[i].y);

37 sort(a+1,a+n+1

,cmp1);

38 cdq(1

,n);

39 printf("

%lld\n

",ans);

40 }

view code

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 就是第...