BZOJ 3052 wc2013 糖果公園

2021-10-19 09:43:51 字數 2595 閱讀 1285

讀題很容易知道這就是一道簡單的樹上帶修改莫隊,樹上待修改莫隊只要將待修改莫隊和樹上莫隊結合起來使用就可以了。(感謝darkbzoj)

#include

#include

#include

#include

#include

#include

#include

#include<

set>

#include

#include

#include

#include

#define scand

(a)scanf

("%d"

,&a)

#define scandd

(a,b)

scanf

("%d%d"

,&a,

&b)#define scanddd

(a,b,c)

scanf

("%d%d%d"

,&a,

&b,&c)

#define mst

(a,b)

memset

(a,b,

sizeof

(a))

#define lowbit

(x)(x&

-x)#define lson rt<<

1#define rson rt<<1|

1using namespace std;

typedef long long ll;

typedef unsigned long long ull;

typedef pair pii;

typedef pair pll;

const int inf=

0x3f3f3f3f

;const ll inf

=0x3f3f3f3f3f3f3f3fll;

const int maxn=

2e5+5;

const ll mod=

1e9+7;

int n,m,blo;

int a[maxn]

,v[maxn]

,w[maxn]

;struct nod1

p[maxn]

;struct nod

edge[maxn<<1]

;struct nod2

que[maxn]

;int head[maxn]

,cnt=1;

void

add(int u,int v)

int loc[maxn]

,st[maxn]

,ed[maxn]

,ti;

int fa[maxn][21

];int dep[maxn]

;void

dfs(int u,int f,int depp)

for(int i=head[u]

;i;i=edge[i]

.nxt)

loc[

++ti]

=u; ed[u]

=ti;

}int lca

(int x,int y)

if(x==y)

return x;

for(int i=

20;i>=

0;i--

)return fa[x][0

];}bool cmp

(nod1 a,nod1 b)

return a.l}ll ans[maxn]

;ll k=0;

int vis[maxn]

;int sum[maxn]

;void

upd(int x)

else

vis[x]^=1

;}void

cupd

(int now,int i)

else

swap

(a[x]

,que[now]

.val)

;//無論有沒有影響都得swap,和帶修莫隊一樣

}int main()

for(int i=

1;i<=n;i++

)scand

(a[i]);

dfs(1,

0,1)

; blo=

pow(ti,

0.6666);

//由於排序是按照帶修莫隊排的所以最優的塊大小肯定是ti^(2/3)

int lenp=

0,lenq=0;

for(int i=

1;i<=q;i++

)//下面按照帶修莫隊+樹上莫隊結合著寫就行

else

else}}

sort

(p+1

,p+1

+lenp,cmp)

; int l=

1,r=

0,now=0;

for(int i=

1;i<=lenp;i++

)for

(int i=

1;i<=lenp;i++

)printf

("%lld\n"

,ans[i]);

}

BZOJ 3052 wc2013 糖果公園

蒟蒻去做糖果公園了qaq 講道理速度能排rk11很開心啊 其實前人之述備矣 複雜度分析 推薦一波棟爺爺的題解 帶修改莫隊其實就是多一維時間 所以你需要資瓷修改和撤銷修改 然後就跟沒修改的莫隊其實差不多了 關於樹上莫隊 很明顯就是用dfs序這個套路 發現出現次數為奇數次的才會算到 棟老師題解那裡也有說...

bzoj3052 wc2013 糖果公園

time limit 200 sec memory limit 512 mb submit 1438 solved 749 submit status discuss sample input 84131 2784 分析 沒想到這能用莫隊來做.先看資料,10w,應該是nlogn的演算法?時限有200...

BZOJ 3052 WC 2013 糖果公園

對樹的dfs序分塊,開啟了新世界的大門233 第一關鍵字是l所在的塊,第二關鍵字是r所在的塊,第三關鍵字是時間,分完塊後暴力莫隊即可 include include include includeusing namespace std typedef long long ll const int n...