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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu3966树链剖分 分析

發布時間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu3966树链剖分 分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/*查找更新等操作 ?用新編號ne 變為有序的,再用線段樹?
ne[] 存的是dfs序編號 ?保證每個重鏈和子樹都是編號連續的?
有序區間才能用線段樹 。所以l,r這些都是新編號,輸入里的是舊編號*/
//找了半天讀不全的錯誤?
????????移位一定要加括號!!!!
????????i<<1|1=3
????????(i<<1)+1=3
????????i<<1+1=4 ??
? ? ? que的返回值是val 所以是ll?
//mid和m別寫混了。因為m一般定義為總量,所以以后中間都用mid!!!
//由于函數的參數比較多,調用函數的次數也比較多,所以參數的順序盡量有規律?

#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=5e4+5; int m,n,p,size[maxn],deep[maxn],f[maxn],son[maxn]; int cnt,head[maxn],nid[maxn],oid[maxn],ncnt,top[maxn]; ll a[maxn]; struct stree{ll value,lazy; }t[maxn<<2];//線段樹范圍是4倍 struct ss{int to,nex;}g[maxn<<1];//g是結構體 沒法memset void create(int u,int v){g[++cnt]={v,head[u]}; head[u]=cnt; } //往下走 找重鏈和重兒子son[] void dfs1(int x,int fath){size[x]=1;deep[x]=deep[fath]+1;son[x]=0;f[x]=fath;for(int i=head[x];i;i=g[i].nex){int v=g[i].to;if(v==fath) continue;//不能往上走dfs1(v,x);size[x]+=size[v];//更新以x為根的樹的大小if(size[v]>size[son[x]]) son[x]=v;} } void dfs2(int x,int topx){top[x]=topx;//注意 topx不要定義成全局 遞歸調用時會亂 nid[x]=++ncnt;oid[ncnt]=x;//因為neid初始化為0,要從1開始 所以++得在前 //有重兒子的話,先遍歷重鏈,賦值nid,oidif(son[x]) dfs2(son[x],topx);//再遍歷輕鏈for(int i=head[x];i;i=g[i].nex){int v=g[i].to;if(v!=f[x]&&v!=son[x]){dfs2(v,v);}} }void build(int l=1,int r=n,int rt=1){//建線段樹 t[rt].lazy=0;//建樹時給每個點lazy賦初值,所以lazy在外面 。若在l==r時執行 只有葉節點 if(l==r){t[rt].value=a[oid[l]];//因為a[]下標存的是舊id return;}int mid=(l+r)>>1;build(l,mid,rt<<1); build(mid+1,r,rt<<1|1);t[rt].value=t[rt<<1].value+t[rt<<1|1].value;//構造都要pushup } //lazy value更新都是 加上(減去)用+= 。變為 用= void pushdown(int ln,int rn,int rt){if(t[rt].lazy){t[rt<<1].value+=t[rt].lazy*ln;t[rt<<1|1].value+=t[rt].lazy*rn;t[rt<<1].lazy+=t[rt].lazy;t[rt<<1|1].lazy+=t[rt].lazy;}t[rt].lazy=0; } void update(ll k,int L,int R,int l=1,int r=n,int rt=1){if(L>r||R<l) return ;if(L<=l&&r<=R){t[rt].value+=k*(r-l+1);t[rt].lazy+=k; return ;}int mid=(l+r)>>1; pushdown(mid-l+1,r-mid,rt);update(k,L,R,l,mid,rt<<1);update(k,L,R,mid+1,r,rt<<1|1);//該題是單點查詢,所以不用pushup求和 } ll que(int k,int l=1,int r=n,int rt=1){if(k<l||k>r) return 0;//超出范圍回0,所以后面可以直接返回左右相加 if(l==r) return t[rt].value;int mid=(l+r)>>1;pushdown(mid-l+1,r-mid,rt);//有lazy所以mid后面都要pushdown 才能保證value是正確的 return que(k,l,mid,rt<<1)+que(k,mid+1,r,rt<<1|1); } void change(int x,int y,ll k){while(top[x]!=top[y]){ if(deep[top[x]]<deep[top[y]]) swap(x,y); update(k,nid[top[x]],nid[x]); //更新深度大的那條鏈,更新完了再向上跳 //topx和x是舊編碼,要用線段樹得用新編碼,所以得用nidx=f[top[x]];} //前面是while所以一直跳到top相等 即xy在同一重鏈上(dfs序連續可轉為線段樹)再更新x到y區間if(deep[x]>deep[y]) swap(x,y);; update(k,nid[x],nid[y]); } //change:找到最近公共祖先 并分段update int main(){int x,y;ll k; while(~scanf("%d%d%d",&n,&m,&p)){ cnt=ncnt=0;for(int i=1;i<=n;i++){head[i]=0; scanf("%lld",&a[i]);}for(int i=1;i<=m;i++){scanf("%d%d",&x,&y);create(x,y);create(y,x);}dfs1(1,0);dfs2(1,1); build();for(int i=1;i<=p;i++){char ch[10];scanf("%s",ch);//%s遇空格結束 if(ch[0]=='Q') {scanf("%d",&x);printf("%lld\n",que(nid[x]));} else{scanf("%d%d%lld",&x,&y,&k);if(ch[0]=='I') change(x,y,k);else change(x,y,-k);}}}return 0; }

總結

以上是生活随笔為你收集整理的hdu3966树链剖分 分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 蜜桃av色偷偷av老熟女 | 三上悠亚影音先锋 | 欧美日韩视频在线观看一区 | 久久99精品国产麻豆婷婷洗澡 | 日韩精品卡通动漫网站 | 久久免费视频99 | 住在隔壁的她动漫免费观看全集下载 | 毛片视频免费 | 亚洲free性xxxx护士白浆 | 人妻洗澡被强公日日澡 | 精彩视频一区二区三区 | 91在线精品李宗瑞 | 中文字幕 欧美激情 | 日本深夜福利 | 97自拍视频 | 亚洲国产精品suv | 成人在线观看小视频 | 午夜大片在线观看 | 中文字幕在线观看网站 | 免费成人深夜夜行网站视频 | 国产精品视频第一页 | 精品国产一区二区三区av性色 | 亚洲性大片 | 男男gay羞辱feet贱奴vk | 欧美日韩在线高清 | 亚色中文字幕 | 国产在线一区二 | 国产精品久久久久永久免费看 | 精品国产一区二区不卡 | 亚洲高清免费 | 蜜桃va | 波多野结衣一区二区三区免费视频 | 亚洲av无码专区国产乱码不卡 | 亚洲天堂五码 | 可以在线观看的黄色 | 欧美日韩在线视频免费 | 日韩亚洲第一页 | 高跟鞋调教—视频|vk | 狠狠干影视 | 成人人伦一区二区三区 | 2022精品国偷自产免费观看 | 污网站在线观看免费 | 日韩a在线观看 | 爱情岛黄色| 亚洲av无码乱码国产麻豆 | 男人天堂1024 | 国产精品久久久久久久免费 | 中文字幕第一页亚洲 | 日韩黄色网 | 97视频久久 | 毛片毛片女人毛片毛片 | 少妇被又大又粗又爽毛片久久黑人 | 国产精品天美传媒 | 亚洲色图18p | 国产成人无码aa精品一区 | 成人一卡二卡 | 色无极在线 | 国产不卡视频一区二区三区 | 极品国产在线 | 日韩制服在线 | 校园激情亚洲 | 国产a国产 | 欧美日韩国产不卡 | 密臀av一区二区 | 97在线观看免费视频 | 迈开腿让我尝尝你的小草莓 | 狠狠干in | 色呦呦官网 | 欧美特黄一级视频 | 老熟女高潮喷水了 | 91黄色免费版 | 快色视频 | 99成人精品| 亚洲啊啊啊啊啊 | 久久久国产免费 | 亚洲av色一区二区三区精品 | 九九精品在线观看视频 | 五月婷在线观看 | 2019天天干天天操 | 农村老熟妇乱子伦视频 | 麻豆综合网 | 污污视频在线免费观看 | 国产精品久久久久无码av色戒 | 超级砰砰砰97免费观看最新一期 | 九九久久综合 | 夜夜操狠狠操 | 激情毛片视频 | 国产日日干 | 中文字幕一区二区人妻 | www.香蕉视频在线观看 | 天天拍天天色 | 国产91一区二区三区 | 成人免费影视网站 | 欧美成人吸奶水做爰 | 欧洲精品一区二区 | 男女羞羞动态图 | 中文字幕精品一二三四五六七八 | 国产精品伦一区二区三级视频 | 在线视频久久 |