日韩性视频-久久久蜜桃-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的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 337p日本欧洲亚洲大胆精筑 | 欧美一二三区视频 | av永久网站 | 精品人妻少妇一区二区三区 | 日本特级黄色大片 | 国产精品免费一区二区三区 | 亚洲好骚综合 | 人人综合网 | 国产精品亚洲а∨天堂免在线 | 夜色视频在线观看 | 狠狠躁夜夜躁人 | 中年夫妇啪啪高潮 | 性色在线| 国产日韩欧美中文 | 高h1v| 理论黄色片| 国产叼嘿视频 | 成人激情文学 | 久久午夜伦理 | 免费国产黄色片 | 欧美男人又粗又长又大 | 久久精品五月天 | 青青草一区二区三区 | 91九色国产ts另类人妖 | 日韩三级免费 | jizz欧美性23| 一边摸内裤一边吻胸 | 91精品免费在线 | 国产成年人视频 | 国产精品av在线免费观看 | 91av视频在线观看 | 男男做爰猛烈叫床爽爽小说 | 国产日韩欧美成人 | 国产一区二区三区视频免费在线观看 | 欧洲美女与动交zozzo | 精品韩国一区二区三区 | 欧美 日韩 国产 一区二区三区 | 一区二区三区视频免费观看 | 欧美大黄视频 | 古代玷污糟蹋np高辣h文 | 日本一区二区三区四区在线观看 | 不卡的毛片 | 国产精品免费视频一区二区三区 | 一级特黄aa大片欧美 | 日韩欧美福利视频 | 老女人做爰全过程免费的视频 | 日本成人午夜视频 | 日韩福利在线视频 | 夜夜天堂| 欧美顶级少妇做爰 | 国产黄色一级片 | 在线爱情大片免费观看大全 | 一区二区不卡免费视频 | 精品91自产拍在线观看二区 | 欧美特级黄色片 | 亚洲精品国产精品国自 | 久久人人爽人人爽人人片 | xxxx69视频| 久久九九色 | 一本色道久久综合亚洲精品小说 | 美日韩一区 | 黑人巨大精品欧美一区二区蜜桃 | 日韩精品高清在线观看 | 一区二区三区波多野结衣 | 精品三级国产 | 非洲黑人毛片 | 日本黄色美女 | 亚洲av无码一区二区三区网址 | 精品视频三区 | 香蕉视频成人在线 | 亚洲黄色视屏 | 成人精品一区二区三区四区 | 九九热精品视频 | 成人性生交视频免费观看 | 亚洲妇熟xx妇色黄蜜桃 | 69亚洲乱人伦 | 国产精品午夜一区二区 | 黄色小说在线视频 | 中文字幕第一 | 色女人网| 欧美亚洲一级片 | 操她视频在线观看 | 狠狠干天天操 | 国产偷人妻精品一区二区在线 | 欧美一级片在线 | 国产原创av在线 | 91在线播放国产 | 成人在线免费视频观看 | 91亚洲天堂 | 别揉我奶头啊嗯一区二区 | 可以免费观看av的网站 | 国产精品福利小视频 | 欧美第一页浮力影院 | 国产精品成人久久久 | 人人澡超碰碰 | 日韩高清中文字幕 | 女人张开双腿让男人捅 | 黄色免费网站观看 | 激情福利网 |