1 #include 2 #include 3 #include 4 #include 5 #include 6view code#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 }
題目大意:見題目。
做法:上次我用的是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。顯然,兩朵花可能有同樣的屬性。需要統計出評出每個等級的花的數量。...