BZOJ 3052 wc2013 糖果公園

2021-08-07 20:07:37 字數 1601 閱讀 7255

蒟蒻去做糖果公園了qaq

講道理速度能排rk11很開心啊~

其實前人之述備矣 複雜度分析 推薦一波棟爺爺的題解

帶修改莫隊其實就是多一維時間 所以你需要資瓷修改和撤銷修改

然後就跟沒修改的莫隊其實差不多了

關於樹上莫隊 很明顯就是用dfs序這個套路

發現出現次數為奇數次的才會算到 棟老師題解那裡也有說到

就討論一下 lca是不是那兩個點就好

(**參考 抄襲 了紀中棟棟 不過我覺得我寫的挺短挺好看的)

#include

using namespace std;

typedef long long ll;

const int n=1e5+5;

inline int

read()

while(ch>='0' && ch<='9')

return

x*f;

}int nex[n<<1],go[n<<1],fir[n],len,f[n][17];

int l[n],r[n],tot,dep[n],a[n<<1],bl[n<<1];

void ins(int

x,int

y)void dfs(int

x,int fa)

r[x]=++tot,a[tot]=x;

}int lca(int

x,int

y) if(x==y)return

x; i=int(log(dep[x])/log(2));

for(;~i;--i) if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];

return f[x][0];

}struct asko[n]; int ol;

int cmp(ask x,ask y)

int n,m,q,v[n],w[n],c[n],d[n][3],dl,cnt[n];

ll s,ans[n]; bool e[n];

void change(int

x)void ins(int

x) c[d[x][2]]=d[x][1];

}void del(int

x) c[d[x][2]]=d[x][0];

}int main()

dfs(1,0);

for(i=1;i<=n;++i)c[i]=read();

for(i=1;i<=q;++i)

else

else

o[ol].l=l,o[ol].r=r;

o[ol].id=ol,o[ol].x=dl;}}

for(i=dl;i;--i) c[d[i][2]]=d[i][0];

int bk=2100,x=0;

for(i=1;i<=n*2;++i) bl[i]=(i-1)/bk+1;

sort(o+1,o+1+ol,cmp);

l=r=1; change(a[1]);

for(i=1;i<=ol;++i)

for(i=1;i<=ol;++i) printf("%lld\n",ans[i]);

return

0;}

BZOJ 3052 wc2013 糖果公園

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

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...