日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bzoj3786: 星系探索

發(fā)布時(shí)間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj3786: 星系探索 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

學(xué)到了新姿勢(shì),splay維護(hù)括號(hào)序列(聽說是偽ETT(euler-tour-tree 歐拉搜索樹)?)

大型工業(yè)題

注意點(diǎn):1:結(jié)構(gòu)改變了以后編號(hào)變成不連續(xù)的了,要找前驅(qū)和后繼

2:就算lazy也需要先把當(dāng)前點(diǎn)改了,不然計(jì)算出鍋

#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; typedef long long LL; struct trnode {int f,son[2];LL c,ptt,d,sum,lazy; }tr[210000]; void update(int now) {int lc=tr[now].son[0],rc=tr[now].son[1];tr[now].ptt=tr[now].c+tr[lc].ptt+tr[rc].ptt;tr[now].sum=tr[now].d+tr[lc].sum+tr[rc].sum; } void rotate(int x,int w) {int f=tr[x].f,ff=tr[f].f;int R,r;R=f,r=tr[x].son[w];tr[R].son[1-w]=r;if(r!=0)tr[r].f=R;R=ff,r=x;if(tr[ff].son[0]==f)tr[R].son[0]=r;else tr[R].son[1]=r;tr[r].f=R;R=x,r=f;tr[R].son[w]=r;tr[r].f=R;update(f);update(x); } void pushdown(int x) {int k=tr[x].lazy;tr[x].lazy=0;int lc=tr[x].son[0],rc=tr[x].son[1];if(lc!=0){tr[lc].lazy+=k;tr[lc].d+=tr[lc].c*k;tr[lc].sum+=tr[lc].ptt*k;}if(rc!=0){tr[rc].lazy+=k;tr[rc].d+=tr[rc].c*k;tr[rc].sum+=tr[rc].ptt*k;} } int tt,tmp[210000]; void splay(int x,int rt) {int i=x; tt=0;while(i!=rt)tmp[++tt]=i,i=tr[i].f;while(tt>0){ if(tr[tmp[tt]].lazy!=0)pushdown(tmp[tt]); tt--;}while(tr[x].f!=rt){int f=tr[x].f,ff=tr[f].f;if(ff==rt){if(tr[f].son[0]==x)rotate(x,1);else rotate(x,0);}else{if(tr[ff].son[0]==f&&tr[f].son[0]==x)rotate(f,1),rotate(x,1);else if(tr[ff].son[1]==f&&tr[f].son[1]==x)rotate(f,0),rotate(x,0);else if(tr[ff].son[0]==f&&tr[f].son[1]==x)rotate(x,0),rotate(x,1);else if(tr[ff].son[1]==f&&tr[f].son[0]==x)rotate(x,1),rotate(x,0);}} } //~~~~~~~~~~~~~~~base~~~~~~~~~~~~~~~int tp; void insert(int now,int d,int c,int f,int w) {if(now==1||now==tp)c=0;tr[now].f=f;tr[now].son[0]=tr[now].son[1]=0;tr[now].c=tr[now].ptt=c;tr[now].d=tr[now].sum=d;tr[now].lazy=0;if(f!=0)tr[f].son[w]=now; } void cut(int x) {int f=tr[x].f; tr[x].f=0;if(tr[f].son[0]==x)tr[f].son[0]=0;else tr[f].son[1]=0;splay(f,0); } int findL(int x){while(tr[x].son[0]!=0)x=tr[x].son[0]; return x;} int findR(int x){while(tr[x].son[1]!=0)x=tr[x].son[1]; return x;} int findqq(int x){splay(x,0);x=tr[x].son[0]; return findR(x);} int findhj(int x){splay(x,0);x=tr[x].son[1]; return findL(x);} //~~~~~~~~~~~~~~~in~~~~~~~~~~~~~~~~~ LL c[210000]; int list[210000],uz[210000];//按dfs序把樹上的點(diǎn)取出 int yL[210000],yR[210000];//第i個(gè)點(diǎn)的左右括號(hào)的樹上編號(hào) void maketree(int l,int r,int f,int w) {if(l>r)return ;int mid=(l+r)/2;int x=list[mid],u=uz[mid],now=u>0?yL[x]:yR[x];insert(now,c[x]*u,u,f,w);maketree(l,mid-1,now,0);maketree(mid+1,r,now,1);update(now); } LL getsum(int x) {x=findhj(x);splay(x,0);return tr[tr[x].son[0]].sum; } void move(int l,int r,int p) {int ll=findqq(l),rr=findhj(r);splay(ll,0),splay(rr,ll);int x=tr[rr].son[0];cut(x);splay(p,0);int y=tr[p].son[1];cut(y);tr[x].f=p,tr[p].son[1]=x;rr=findR(x);splay(rr,0);tr[y].f=rr,tr[rr].son[1]=y;splay(y,0); } void change(int l,int r,int k) {int ll=findqq(l),rr=findhj(r);splay(ll,0),splay(rr,ll);int x=tr[rr].son[0];tr[x].lazy+=k;tr[x].d+=tr[x].c*k;tr[x].sum+=tr[x].ptt*k;} //~~~~~~~~~~out~~~~~~~~~~~~~~~~~~//---------------------------------------ETT----------------------------------------------------struct node {int x,y,next; }a[110000];int len,last[110000]; void ins(int x,int y) {len++;a[len].x=x;a[len].y=y;a[len].next=last[x];last[x]=len; } void dfs(int x) {list[++tp]=x;uz[tp]=1;yL[x]=tp; for(int k=last[x];k;k=a[k].next)dfs(a[k].y);list[++tp]=x;uz[tp]=-1;yR[x]=tp; }char ss[10]; int main() {freopen("a.in","r",stdin);freopen("a.out","w",stdout);int n,F;scanf("%d",&n);len=0;memset(last,0,sizeof(last));for(int i=2;i<=n;i++)scanf("%d",&F), ins(F,i);for(int i=1;i<=n;i++)scanf("%d",&c[i]); tp=0;list[++tp]=0;uz[tp]=1;yL[0]=tp;dfs(1);list[++tp]=0;uz[tp]=-1;yR[0]=tp; maketree(1,tp,0,0);int Q,x,y;scanf("%d",&Q);while(Q--){scanf("%s",ss+1);if(ss[1]=='Q'){scanf("%d",&x);printf("%lld\n",getsum(yL[x]));}else if(ss[1]=='C'){scanf("%d%d",&x,&y);move(yL[x],yR[x],yL[y]);}else{scanf("%d%d",&x,&y);change(yL[x],yR[x],y);}}return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/AKCqhzdy/p/10201937.html

總結(jié)

以上是生活随笔為你收集整理的bzoj3786: 星系探索的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 全程粗话对白视频videos | 天天干天天操天天干 | 色涩色| 天天天天天天天干 | 久久咪咪 | 国产经典三级在线 | 欧美日韩性生活 | 亚洲国产精 | 国产chinese男男网站大全 | 在线黄网 | 日韩熟女精品一区二区三区 | 国产精品一二三区视频 | 风间由美在线视频 | 91中文字幕在线观看 | 亚洲成人1区 | 中国精品毛片 | 成人免费公开视频 | 日本黄色美女视频 | jizz韩国 | av黄色网 | 无码人妻精品一区二区中文 | 中文字幕欧美另类精品亚洲 | xxxxx黄色片 噜噜噜噜噜色 | 亚洲aaaaaa| 在线视频播放大全 | 婷婷丁香激情五月 | 三女警花合力承欢猎艳都市h | 91操视频 | 色综合啪啪 | 欧美中文字幕在线观看 | jzzijzzij亚洲成熟少妇在线观看 久久久精品人妻一区二区三区 | 护士的小嫩嫩好紧好爽 | 无码国产精品96久久久久 | 娇妻玩4p被三个男人伺候电影 | 国产精品www色诱视频 | 欧美偷拍视频 | 亚洲婷婷一区 | av高清免费 | 欧美xxxx黑人| 免费九九视频 | 欧美精品一二三四 | 精品国产亚洲一区二区麻豆 | 亚洲一区av在线 | 精品美女一区二区三区 | 免费91网站| 国产成人愉拍精品久久 | 人人妻人人澡人人爽欧美一区 | 成熟丰满熟妇高潮xxxxx视频 | 欧美精品成人一区二区在线观看 | 国产精品国产馆在线真实露脸 | 亚洲高清二区 | 欧美老肥婆性猛交视频 | 看看黄色片 | 99精品国产一区 | 亚洲黄色自拍 | 精品国产制服丝袜高跟 | 久久国产精品电影 | 国产精品免费视频一区 | 国产乱子一区二区 | 日本一级做a爱片 | 欧美激情成人在线 | 亚洲麻豆视频 | 久久伊人成人 | 一区二区三区四区免费视频 | 欧美日韩中 | 国产91九色 | 国产精品亚洲一区二区无码 | 飘花影院伦理片 | 国产香蕉97碰碰碰视频在线观看 | 欧美成人午夜影院 | 猎艳山村丰满少妇 | 少妇精品偷拍高潮白浆 | 国产欧美自拍 | 老女人乱淫 | 欧美丰满熟妇bbb久久久 | av无码精品一区二区三区 | 免费a级| 亚洲综合狠狠 | 18pao国产成视频永久免费 | 亚洲九九九 | 欧美巨乳在线观看 | 中文字幕在线观看精品 | 亚洲黄色录像 | 91成人福利视频 | 成年人在线视频免费观看 | 亚州av在线播放 | 一区二区三区免费看 | 三级视频黄色 | 久久bb | 日韩中文一区 | 美女视频免费在线观看 | 亚洲国产精品成人午夜在线观看 | 毛片在线不卡 | 成人自拍视频在线观看 | 美国av毛片 | av天天色 | 国产美女久久久久 | 亚洲免费网站在线观看 | 欧美先锋影音 |