CodePlus 2018 3 月賽 尋找車位

2021-09-06 22:35:00 字數 2426 閱讀 4961

access_globe 有乙個巨大的停車場,這個停車場有 nn 行,每行有 mm 個車位。為了美觀,access_globe 在建立這個停車場時,規定這個停車場必須是長條形的,即 n\ge mn≥m。每個車位都是乙個正方形的區域。

最近,access_globe 正在為抽不到 missing poster 而苦惱,因此他請你幫他維護這個停車場。你需要支援兩個個事件:

一輛車停到某乙個車位中,或一輛車從某個車位開走

查詢乙個矩形區域內最大的只包含空車位的正方形區域

如果你能幫 access_globe 高效地解決這個問題,access_globe 一定會好好獎勵你的。

具體題面

推薦題解

其實就是(對每一列開一顆)開m顆線段樹,第y顆線段樹x處的值為以x行y列為右下端點的最大正方形大小,線段樹就是維護一下最大值。(推薦結合樣例理解)

然後發現第y顆線段樹[l,

r]

[l,r]

[l,r

]的值就是l到r行y列為右下端點的最大正方形大小(不考慮外面的行),然後我們來合併[l,

mid]

[l,mid]

[l,mid

]與[mid

+1,r

][mid+1,r]

[mid+1

,r]的最大正方形大小,我們只需要考慮過mid這條線的正方形,那麼算這條線左邊的拓展,右邊的拓展,再單調佇列掃一遍可以求出o(m)1到m

1到m1到

m顆線段樹的[l,

r]

[l,r]

[l,r

]的答案,然後就合併,嗯合併。

o (m

qlog⁡n

)o(mq \log n)

o(mq

logn

)ac code:

#include

#define n 4000006

#define lc now<<1

#define rc now<<1|1

using

namespace std;

int n,m,q;

struct arr

}mp,rl,ll,val;

int ql[

2005

],qr[

2005

],hl,tl,hr,tr,len[

4*n]

;inline

void

merge

(int r,

int r1,

int r2)

for(

int i=

1;i<=m;i++

) ll[r]

[i]=ll[r2]

[i]+

(ll[r2]

[i]==len[r2]

)*ll[r1]

[i],rl[r]

[i]=rl[r1]

[i]+

(rl[r1]

[i]==len[r1]

)*rl[r2]

[i];

len[r]

=len[r1]

+len[r2];}

void

modify

(int now,

int l,

int r,

int x,

int y)

int mid=

(l+r)

>>

1;x<=mid?

(modify

(lc,l,mid,x,y),0

):(modify

(rc,mid+

1,r,x,y),0

);merge

(now,lc,rc);}

void

build

(int now,

int l,

int r)

int mid=

(l+r)

>>1;

build

(lc,l,mid)

;build

(rc,mid+

1,r)

;merge

(now,lc,rc);}

intquery

(int now,

int l,

int r,

int a,

int b,

int c,

int d)

int mid =

(l+r)

>>1;

return

max(

query

(rc,mid+

1,r,a,b,c,d)

,query

(lc,l,mid,a,b,c,d));

}int

main()

else

}}

Codeplus 4月賽 最短路

題意 理論上是給定一張完全圖,有邊權,在給一些單向邊求最短路。思路 我充分體會到了我圖論的菜。理論上建圖肯定是不能 n 2 的,考慮如何優化呢?將邊權異或值二進位制替換,最後一遍最短路就行,記得把 n 開到 2 k luogu judger enable o2 include define mp m...

CodePlus 第五次網路賽 掐指會算

失蹤人口暫時回歸。臨近 noip 了,退役選手準備打一打 div.2 來練練手 應該不是天氣冷了,沒衣服穿了 遊戲體驗差,oj 又和第一次一樣卡了半天。根據異或的性質,不難發現 a aa 矩陣的每行每列最多只能異或一次。所以我們可以假設 a aa 矩陣的第一行是否被異或了,然後把所有狀態遞推出來,最...

2018 1月 月賽總結

a題 n,m 1e18,p 1e5,lucas定理求組合數 include include include using namespace std typedef long long ll ll n,m,p 100003 ll f 100005 ll qpow ll a,ll b return an...