牛客挑戰賽34 銀老闆的遊戲

2021-10-01 04:22:40 字數 2477 閱讀 8924

題意

三種操作,一種是畫乙個矩形,一種是刪乙個矩形,一種是提問乙個矩形,問尚存的矩形中有多少和提問的相交

題解拿總數減去不相交的

要減去9個區域的

上下左右的用樹狀陣列很好就可以計算,但是發現,4個角的矩形被重複減去了,所以要加回來

來到了問題的核心,求乙個角的矩形的數量

以左下角舉例

記矩形右上角座標 (x,

y)(x,y)

(x,y

),加入時刻為z

zz,提問矩形左下角座標 (x,

y)(x,y)

(x,y

),當前時刻為 z

zz,求得就是 xyz

xyz<

z的數量

乙個三維偏序的問題

四個角都離線搞一下就好了

**

#include
#define n 200010

#define lb lower_bound

#define sc(x) scanf("%d",&x)

#define scc(x,y) scanf("%d%d",&x,&y)

using namespace std;

int lx[n]

,ly[n]

,ans[n]

,op[n]

,nx,ny,n;

struct rdw[n]

,tmp[n]

;struct rec

}g[n]

,t[n]

;struct bit

inline

intget

(int x)

void

cls(

)}u,d,l,r;

void

cdq(

int l,

int r)

else

}while

(y<=r)

for(

int i=l;i

) u.

up(w[i]

.c,-w[i]

.op)

;while

(x<=t) tmp[k++

]=w[x++];

for(

int i=l;i<=r;i++

) w[i]

=tmp[i];}

void

solve

(int f1,

int f2)

;else

w[i]

=rd;

cdq(

1,n);}

intmain()

if(op[i]==1

) t[

++tt]

=g[i];}

sort

(lx+

1,lx+nx+1)

;sort

(ly+

1,ly+ny+1)

; nx=

unique

(lx+

1,lx+nx+1)

-lx-

1, ny=

unique

(ly+

1,ly+ny+1)

-ly-1;

for(

int i=

1;i<=n;i++

) g[i]

.a=lb

(lx+

1,lx+nx+

1,g[i]

.a)-lx+1,

g[i]

.x=lb

(lx+

1,lx+nx+

1,g[i]

.x)-lx+1,

g[i]

.b=lb

(ly+

1,ly+ny+

1,g[i]

.b)-ly+1,

g[i]

.y=lb

(ly+

1,ly+ny+

1,g[i]

.y)-ly+1;

for(

int i=

1;i<=n;i++

)else

} u.

cls();

solve(0

,0);

// l d

solve(0

,1);

// l u

solve(1

,0);

// r d

solve(1

,1);

// r u

for(

int i=

1;i<=n;i++)if

(op[i]==3

)printf

("%d\n"

,ans[i]);

}

牛客挑戰賽58

前i 1的二進位制相等,a的前n個數的前i 1位可以亂取,b的前n 1個數前i 1位也可以亂取,因為b的第n個數的前i 1異或可為任意值,所以sum1 2 i 1 n 2 i 1 n 1 2 i 1 2n 1 a的第i位為1且b的第i位為0 只要a的n數第i位中有乙個不為0的,a的第i位不為0,b的...

牛客Wannafly挑戰賽12 題解

傳送門 說是比賽題解,其實我只會前三題 後面的一定補 t1題意,在乙個長度為n的時間內,問如何選擇存款期限,使得收益最大。dp include include include include using namespace std define fi first define se second d...

日常摸魚 牛客挑戰賽3

無 期望dp,要用字首和優化一下。略了 比較水的追及問題。但是兩個點一開始就在一起要特判掉。稍微轉化一下。只用求數列中任意兩對數的和的位數,這個可以隨便套資料結構。思路大致跟上一場蝴蝶差不多。而且比上場那個簡單多了,連資料結構都不用套。給定乙個n個點的樹,以1為根,邊權都是1。乙個人從起點s開始隨機...