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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HZOJ Weed

發布時間:2025/4/16 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HZOJ Weed 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者的題解:

如果一段操作被執行,會對整個棧有什么影響呢?

把棧彈出若干個數后再插入若干個數。

線段樹:

每個點紀錄三個值:執行完這段操作后會刪多少個,再插多少個,插的和一共是多少。

合并值時再用一個函數查找左孩子被從右刪除若干個后剩下的插入總和是多少。

建樹復雜度O( N log N ), 單次查詢復雜度O( log ^ 2 N), 總復雜度O( N log N + Q log ^2 N ).

樹袋熊學長的題解:

? 實際上,每個加數和刪除的操作可以看作是入棧和彈棧操作,之后可以用線段樹維護多個操作間的關系。線段樹的下標是操作時間,由于我們想得到整個序列經過修改操作后的結果,因此線段
樹上維護四個信息:
s:區間內加數總和(僅考慮區間內部影響);

nd:當前區間向前刪除數字的數量;
na:當前區間內“凈”加的元素數。
sd:當前區間被右兄弟刪除后的總和。 ※僅對左兒子維護此信息。
? 我們通過維護以上四個標記,就可以得到答案(root->s)。現在我們考慮如何維護信息。

首先,在建樹或修改時,只需要將葉子節點的前三個標記維護好即可;在遞歸返回時,再計算最后一個。如果左兒子不夠右兒子刪,那么非常簡單,直接利用這幾個標記計算即可,l->sd=0。
比較麻煩的是左兒子不被刪光的情況。我們先實現一個函數cal(x),利用sd標記計算在當前區間中刪去x個元素后的和

? 有了這個函數,我們就可以非常方便地計算左兒子的sd,維護其
他標記了,不再贅述。

由于這個奇怪的函數在每層節點都會調用,而一共有O(logn)層節點,所以線段樹操作的時間復雜度變為O(log 2 n),總時間復雜度也比常規的線段樹多一個log。
? 難點主要在于使用額外的函數維護信息,并正確的討論各種情況。
? 考試時一定要想清楚,時間復雜度是靠“鏈狀”延伸的維護函數保障的,如果不小心寫成了兩邊都下去,就變成O(n 2 )了。

?還是說我自己咋寫的吧,

用線段樹維護操作(好象是第二次碰到這種題),對于線段樹的每個節點,維護三個信息,del當前節點刪除其左兄弟幾個元素,add只考慮當前區間影響區間內的元素個數,val只考慮當前區間影響區間內的和。

建樹時對于葉子節點就很容易了,直接賦值就行了。下面考慮怎么合并,分三種情況:

  • add(ls(x))==del(rs(x)),相當于x節點的右兒子正好刪掉了左兒子的所有元素,于是 del(x)=del(ls(x)),add(x)=add(rs(x)),val(x)=val(rs(x);
  • add(ls(x))< del(rs(x)),x節點的右兒子刪掉了左兒子的所有元素還要多,于是del(x)=dal(ls(x))+del(rs(x))-add(ls(x)),add(x)=add(rs(x)),val(x)=val(rs(x));
  • add(ls(x))> del(rs(x)),x節點的有兒子沒有全部刪掉左兒子的所有元素,于是 del(x)=del(ls(x));add(x)=add(rs(x))+add(ls(x))-del(rs(x));val(x)=val(rs(x))+cal(ls(x),del(rs(x)));?
  • cal(k,x)表示k節點的區間刪掉結尾x個元素后的和:

    int cal(int k,int x) {if(x==add(rs(k)))return val(k)-val(rs(k));if(x<add(rs(k))) return val(k)-val(rs(k))+cal(rs(k),x);if(x>add(rs(k))) return cal(ls(k),x-add(rs(k))+del(rs(k))); }

    ?到這里大概就沒什么了。

    最后答案為val(1),對于每次修改直接遞歸到對應葉子節點即可。

    ?

    1 #include<iostream> 2 #include<cstdio> 3 #define MAXN 200100 4 #define LL long long 5 using namespace std; 6 struct tree 7 { 8 int l,r,del,add,val; 9 #define l(x) tr[x].l 10 #define r(x) tr[x].r 11 #define del(x) tr[x].del 12 #define add(x) tr[x].add 13 #define val(x) tr[x].val 14 #define ls(x) (x<<1) 15 #define rs(x) (ls(x)+1) 16 }tr[MAXN*10]; 17 int m,q,k[MAXN],v[MAXN]; 18 int cal(int k,int x) 19 { 20 if(x==add(rs(k)))return val(k)-val(rs(k)); 21 if(x<add(rs(k))) return val(k)-val(rs(k))+cal(rs(k),x); 22 if(x>add(rs(k))) return cal(ls(k),x-add(rs(k))+del(rs(k))); 23 } 24 void updata(int x) 25 { 26 if(add(ls(x))==del(rs(x))) 27 { 28 del(x)=del(ls(x));add(x)=add(rs(x));val(x)=val(rs(x)); 29 } 30 if(add(ls(x))<del(rs(x))) 31 { 32 del(x)=del(ls(x))+del(rs(x))-add(ls(x)); 33 add(x)=add(rs(x)); 34 val(x)=val(rs(x)); 35 } 36 if(add(ls(x))>del(rs(x))) 37 { 38 del(x)=del(ls(x)); 39 add(x)=add(rs(x))+add(ls(x))-del(rs(x)); 40 val(x)=val(rs(x))+cal(ls(x),del(rs(x))); 41 } 42 } 43 void build(int x,int l,int r) 44 { 45 l(x)=l,r(x)=r; 46 if(l==r) 47 { 48 if(k[l]==0) del(x)=0,val(x)=v[l],add(x)=1; 49 else del(x)=v[l],val(x)=0,add(x)=0; 50 return; 51 } 52 int mid=(l+r)>>1; 53 build(ls(x),l,mid); 54 build(rs(x),mid+1,r); 55 updata(x); 56 } 57 void change(int x,int t,int k,int v) 58 { 59 if(l(x)==r(x)) 60 { 61 if(k==0)del(x)=0,val(x)=v,add(x)=1; 62 else del(x)=v,val(x)=0,add(x)=0; 63 return; 64 } 65 int mid=(l(x)+r(x))>>1; 66 if(t<=mid)change(ls(x),t,k,v); 67 else change(rs(x),t,k,v); 68 updata(x); 69 } 70 signed main() 71 { 72 /// freopen("weed.in","r",stdin); 73 74 cin>>m>>q; 75 for(int i=1;i<=m;i++) 76 cin>>k[i]>>v[i]; 77 build(1,1,m); 78 int c,kk,vv; 79 for(int i=1;i<=q;i++) 80 { 81 cin>>c>>kk>>vv; 82 change(1,c,kk,vv); 83 cout<<val(1)<<endl; 84 } 85 } View Code

    ?

    轉載于:https://www.cnblogs.com/Al-Ca/p/11331095.html

    總結

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

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

    主站蜘蛛池模板: 蜜桃久久久久久久 | 男同毛片 | 欧美少妇bbw | 久久久久二区 | 91亚洲视频| 这里只有久久精品 | 青青草午夜| 激情视频亚洲 | xxx日韩| 青青视频一区二区 | 波多野结衣视频在线观看 | 波多野结衣99 | 国产日韩91 | 免费在线观看一区 | 激情久久中文字幕 | 中文国产在线观看 | 香蕉视频一区二区三区 | 国语对白精彩对话 | 青娱乐激情 | 国产精品久久久久免费 | 久草视频在线免费看 | 中文字幕超清在线观看 | 国产高清欧美 | 免费网站观看www在线观看 | av鲁丝一区鲁丝二区鲁丝三区 | 九一精品视频 | 男操女视频网站 | 仙踪林久久久久久久999 | 国内av网站 | 国产青青 | 国产精品爽爽久久 | 国产成人+综合亚洲+天堂 | 无码国精品一区二区免费蜜桃 | 亚洲图片中文字幕 | 亚洲精品无码一区二区 | 午夜精品久久久久久久久久蜜桃 | babes性欧美69 | 国产成人三级在线 | 在线看一区| 亚洲av第一成肉网 | 久久丫精品久久丫 | 性高潮久久久久久久 | 久久韩日 | 好吊色这里只有精品 | 完全免费在线视频 | 欧美一区二区三区的 | 国产一区二区激情 | 国产又大又黄又爽 | 日韩一区二区不卡 | 超薄肉色丝袜一二三 | 影音先锋成人网 | 国产农村妇女毛片精品 | 黄色靠逼视频 | 国产色在线视频 | 成人动漫av| 天天爽夜夜爽夜夜爽 | 97神马影院 | 久久久久久久久久av | 久久福利一区 | a毛片大片 | 两根大肉大捧一进一出好爽视频 | 老司机精品视频在线 | 韩国女主播一区 | 亚洲九九色| 人人爱人人搞 | 丝袜福利视频 | 国产精品人 | 嫩草在线观看 | 鬼灭之刃柱训练篇在线观看 | 都市激情校园春色亚洲 | avtt在线播放 | 日韩一卡二卡三卡 | 台湾佬久久 | 99ri国产 | 爱情岛亚洲品质自拍极速福利网站 | 欧美另类综合 | 91视频99| 激情深爱五月 | 毛片无遮挡高清免费观看 | 成人黄色在线观看 | 日本黄色录像 | 亚洲性片| 色欲久久久天天天精品综合网 | 91亚洲国产成人精品一区二三 | 国产精品二三区 | 日韩电影在线观看中文字幕 | 毛片基地在线播放 | 不卡的毛片 | 一级片免费看视频 | 天堂在线精品 | www.五月天com| 在线 日本 制服 中文 欧美 | 男人的天堂伊人 | www.黄色网址 | 亚洲人色| 一区二区视频播放 | 性久久久久 | 九色影院| 久操青青 |