題意
三種操作,一種是畫乙個矩形,一種是刪乙個矩形,一種是提問乙個矩形,問尚存的矩形中有多少和提問的相交
題解拿總數減去不相交的
要減去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開始隨機...