bzoj3262 陌上花開 樹套樹

2022-05-06 11:33:07 字數 1618 閱讀 5251

1 #include 2 #include 3 #include 4 #include 5 #include 6

#define maxn 100005

7#define maxm 200005

8#define maxk 2000005

9using

namespace

std;

1011

int n,k,temp,tot,root[maxm*4],ans[maxn],ans[maxn],sum[maxn],fa[maxk],size[maxk],times[maxk],son[maxk][2

],val[maxk];

12struct

sega[maxn],b[maxn];

15bool

comp(seg x,seg y)

20struct

tsegment

22void query(int k,int x,int

op)32}33

int which(int

x)36

void update(int

x)39

void rotata(int

x)45

void splay(int x,int goal,int

op)51 update(x); if (goal==0) root[op]=x;52}

53void insert(int k,int x,int

z)59

for(;;)else

69if (bo==1) break;70

}71}72

}splay;

73struct

fsegment

75void query(int k,int l,int r,int x,int y,int z,int

op)int mid=(l+r)/2;80

if (x<=mid) query(k*2

,l,mid,x,y,z,op);

81if (y>mid) query(k*2+1,mid+1

,r,x,y,z,op);82}

83void insert(int k,int l,int r,int x,int y,int

z)89

}tree;

90struct

ksegment

97 memset(ans,0,sizeof

(ans));

98for (int i=1;i<=temp;i++) ans[ans[i]+sum[i]-1]+=sum[i];

99for (int i=0;i"

%d\n

",ans[i]);

100}

101}task;

102int

main()

116tree.prepare();

117task.work();

118return0;

119 }

view code

題目大意:見題目。

做法:上次我用的是cdq分治+樹狀陣列,這次寫的是線段樹套splay,比較裸的樹套樹了,,,一維排序,另外兩維在樹套樹上維護一下即可。

樹套樹。

BZOJ 3262 陌上花開 「樹套樹」

三維空間內求每個點比它3維都要大的點的個數。第1維排序,第2維樹狀陣列,第3維treap。好像第1維排序就叫做降維了?神tm吧乙個陣列開錯大小老wa。cdq分治好像挺好寫 include include using namespace std int read const int n 100005,...

BZOJ 3262 陌上花開 樹套樹

蒟蒻不會什麼cdq分治,treap套樹狀陣列寫好。看來還是有必要學一下cdq分治,逼近總不能每次拿著平衡樹亂套啊!這道題大致思路就是排序 樹狀陣列 treap,明了!include include include include include using namespace std const i...

BZOJ3262 陌上花開

description 有n朵花,每朵花有三個屬性 花形 s 顏色 c 氣味 m 又三個整數表示。現要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數量。定義一朵花a比另一朵花b要美麗,當且僅當sa sb,ca cb,ma mb。顯然,兩朵花可能有同樣的屬性。需要統計出評出每個等級的花的數量。...