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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

[HZOI 2016][Tyvj 1729]文艺平衡树 这道题我真是哭了,调了一下午,一晚上

發(fā)布時(shí)間:2024/9/5 编程问答 90 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [HZOI 2016][Tyvj 1729]文艺平衡树 这道题我真是哭了,调了一下午,一晚上 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【題目描述】

您需要寫(xiě)一種數(shù)據(jù)結(jié)構(gòu)(可參考題目標(biāo)題),來(lái)維護(hù)一個(gè)有序數(shù)列,其中需要提供以下操作:翻轉(zhuǎn)一個(gè)區(qū)間,例如原有序序列是5 4 3 2 1,翻轉(zhuǎn)區(qū)間是[2,4]的話,結(jié)果是5 2 3 4 1

【輸入格式】

第一行為n,m n表示初始序列有n個(gè)數(shù),這個(gè)序列依次是(1,2……n-1,n) ?m表示翻轉(zhuǎn)操作次數(shù)

接下來(lái)m行每行兩個(gè)數(shù)[l,r] 數(shù)據(jù)保證 1<=l<=r<=n

【輸出格式】

輸出一行n個(gè)數(shù)字,表示原始序列經(jīng)過(guò)m次變換后的結(jié)果

【樣例輸入】

5 3 1 3 1 3 1 4

【樣例輸出】

4 3 2 1 5

【數(shù)據(jù)范圍】

N,M<=100000

【來(lái)源】

Tyvj 1729

solution

板子題,但是從這個(gè)板子題里,我真是學(xué)會(huì)了很多東西

在調(diào)的很長(zhǎng)時(shí)間里,我甚至思考過(guò)人生

體會(huì)了絕處逢生的感覺(jué)

有兩個(gè)地方:

1.在kth和rot里都要pushdown

2.INF哨兵節(jié)點(diǎn)的父親一定要=-INF的 ?(一開(kāi)始) (就因?yàn)檫@個(gè),我調(diào)了很長(zhǎng)時(shí)間)

1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #define ls(x) ((x)->ch[0]) 5 #define rs(x) ((x)->ch[1]) 6 #define sz(x) ((x)->size) 7 #define p(x) ((x)->p) 8 using namespace std; 9 const int INF=0x7fffffff; 10 struct son 11 { 12 int v,size,sw; 13 son *ch[2],*p; 14 son(int val,son *fa) 15 { 16 v=val;size=1;sw=0;p=fa; 17 } 18 }*root,*null; 19 int n,m; 20 void pushup(son *x){sz(x)=sz(ls(x))+sz(rs(x))+1;} 21 void swap(son *&a,son *&b){son *temp=a;a=b;b=temp;} 22 void change(son *x) 23 { 24 if(x==null)return ; 25 x->sw^=1; 26 //printf("1 %d %d\n",ls(x)->v,rs(x)->v); 27 swap(ls(x),rs(x)); 28 //printf("2 %d %d\n",ls(x)->v,rs(x)->v); 29 } 30 void pushdown(son *x) 31 { 32 if(!x->sw||x==null)return ; 33 change(ls(x));change(rs(x));x->sw=0; 34 } 35 int islc(son *x){return ls(p(x))==x;} 36 // is left child???? 37 38 void rot(son *y)//x:父親 y:兒子 z:祖父 39 { 40 //printf("yrot=%d\n",y->v); 41 son *x=p(y);int d=islc(y); 42 pushdown(x);pushdown(y);//****** 43 if(p(x)==null)root=y; 44 else p(x)->ch[islc(x)^1]=y;//這個(gè)地方 warnnig 45 p(y)=p(x);// 46 x->ch[d^1]=y->ch[d]; 47 if(y->ch[d])p(y->ch[d])=x;// 48 y->ch[d]=x;p(x)=y;// 49 pushup(x);pushup(y); 50 } 51 52 /*void rot(son *x,int d)//x:父親 y:兒子 z:祖父 53 { 54 son *y=x->ch[d^1]; 55 pushdown(x);pushdown(y);//****** 56 if(p(x)!=null)p(x)->ch[islc(x)^1]=y; 57 else root=y; 58 p(y)=p(x);// 59 x->ch[d^1]=y->ch[d]; 60 if(y->ch[d])p(y->ch[d])=x;// 61 y->ch[d]=x;p(x)=y;// 62 pushup(x);pushup(y); 63 }*/ 64 65 void bianli(son *x); 66 67 void splay(son *x,son *t)//x:兒子 y:父親 68 { 69 //if(t==root)printf("YES\n"); 70 //printf("beginsplay %d\n",x->v); 71 while(p(x)!=t) 72 { 73 //printf("ci\n"); 74 son *y=p(x); 75 if(p(y)!=t) 76 { 77 if(islc(x)==islc(y))rot(y); 78 else rot(x); 79 } 80 //bianli(root); 81 //printf("x=%d y=%d\n",x->v,y->v); 82 //printf("p(x)->val=%d\n",p(x)->v); 83 //printf("p(p(x))=%d\n",p(p(x))->v); 84 rot(x); 85 //bianli(root); 86 //printf("\n"); 87 } 88 } 89 90 /*void splay(son *x,son *t)//x:兒子 y:父親 91 { 92 if(t==root)printf("YES\n"); 93 //printf("beginsplay\n"); 94 while(p(x)!=t) 95 { 96 printf("ci\n"); 97 son *y=p(x); 98 if(p(y)!=t)islc(x)==islc(y)?rot(y):rot(x); 99 rot(x); 100 } 101 }*/ 102 son* kth(int k) 103 { 104 //printf("beginkth\n"); 105 son *x=root; 106 while(x!=null) 107 {//printf("endkth\n"); 108 //printf("k=%d\n",k); 109 pushdown(x);//****** 110 if(sz(ls(x))+1==k){return x;} 111 if(sz(ls(x))+1>k)x=ls(x); 112 else {k-=(sz(ls(x))+1);x=rs(x);} 113 } 114 } 115 116 117 void Splay(int l,int r) 118 { 119 //printf("l=%d r=%d\n",l,r); 120 son *zuo=kth(l); 121 122 //printf("zuo=%d\n",zuo->v); 123 splay(zuo,null); 124 //bianli(root); 125 //printf("2\n"); 126 son *you=kth(r+2); 127 //printf("you=%d\n",you->v); 128 splay(you,root); 129 //bianli(root); 130 //cout<<0; 131 change(root->ch[1]->ch[0]); 132 } 133 son* build(int l,int r,son *fa) 134 { 135 if(l>r)return null; 136 int mid=(l+r)>>1; 137 son *x=new son(mid,fa); 138 x->ch[0]=build(l,mid-1,x); 139 x->ch[1]=build(mid+1,r,x); 140 pushup(x); 141 return x; 142 } 143 144 void bianli(son *x) 145 { 146 if(x==null)return ; 147 pushdown(x); 148 //printf("%d ",x->size); 149 //printf("%d ",x->v); 150 bianli(ls(x)); 151 if(x->v!=INF&&x->v!=-INF) 152 printf("%d ",x->v); 153 bianli(rs(x)); 154 } 155 156 int main(){ 157 //freopen("sph.in","r",stdin); 158 //freopen("sph.out","w",stdout); 159 null=new son(0,0);null->size=0; 160 root=new son(-INF,null); 161 root->ch[1]=new son(INF,root);//son(INF,root) 我竟然寫(xiě)成了son(INF,null) 調(diào)了一下午 162 root->ch[0]=null; 163 scanf("%d%d",&n,&m); 164 //printf("n=%d m=%d\n",n,m); 165 root->ch[1]->ch[0]=build(1,n,root->ch[1]); 166 root->ch[1]->ch[1]=null; 167 pushup(root->ch[1]); 168 pushup(root); 169 170 //if(root==null) 171 // printf("what the fuck!!!\n"); 172 173 //bianli(root); 174 175 for(int i=1;i<=m;++i) 176 { 177 int qq,ww; 178 scanf("%d%d",&qq,&ww); 179 Splay(qq,ww); 180 //printf("bianli= "); 181 //bianli(root); 182 //printf("\n"); 183 //bianli(root); 184 } 185 //printf("\n"); 186 bianli(root); 187 //while(1); 188 return 0; 189 } 調(diào)了一個(gè)下午,未刪注釋 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #define ls(x) ((x)->ch[0]) 5 #define rs(x) ((x)->ch[1]) 6 #define sz(x) ((x)->size) 7 #define p(x) ((x)->p) 8 using namespace std; 9 const int INF=0x7fffffff; 10 struct son 11 { 12 int v,size,sw; 13 son *ch[2],*p; 14 son(int val,son *fa) 15 { 16 v=val;size=1;sw=0;p=fa; 17 } 18 }*root,*null; 19 int n,m; 20 void pushup(son *x){sz(x)=sz(ls(x))+sz(rs(x))+1;} 21 void swap(son *&a,son *&b){son *temp=a;a=b;b=temp;} 22 void change(son *x) 23 { 24 if(x==null)return ; 25 x->sw^=1; 26 swap(ls(x),rs(x)); 27 } 28 void pushdown(son *x) 29 { 30 if(!x->sw||x==null)return ; 31 change(ls(x));change(rs(x));x->sw=0; 32 } 33 int islc(son *x){return ls(p(x))==x;} 34 // is left child???? 35 36 void rot(son *y)//x:父親 y:兒子 z:祖父 37 { 38 son *x=p(y);int d=islc(y); 39 pushdown(x);pushdown(y);//****** 40 if(p(x)==null)root=y; 41 else p(x)->ch[islc(x)^1]=y;//這個(gè)地方 warnnig 42 p(y)=p(x);// 43 x->ch[d^1]=y->ch[d]; 44 if(y->ch[d])p(y->ch[d])=x;// 45 y->ch[d]=x;p(x)=y;// 46 pushup(x);pushup(y); 47 } 48 void bianli(son *x); 49 50 void splay(son *x,son *t)//x:兒子 y:父親 51 { 52 while(p(x)!=t) 53 { 54 son *y=p(x); 55 if(p(y)!=t)islc(x)==islc(y)?rot(y):rot(x); 56 rot(x); 57 } 58 } 59 son* kth(int k) 60 { 61 son *x=root; 62 while(x!=null) 63 { 64 pushdown(x);//****** 65 if(sz(ls(x))+1==k){return x;} 66 if(sz(ls(x))+1>k)x=ls(x); 67 else {k-=(sz(ls(x))+1);x=rs(x);} 68 } 69 } 70 void Splay(int l,int r) 71 { 72 splay(kth(l),null); 73 splay(kth(r+2),root); 74 change(root->ch[1]->ch[0]); 75 } 76 son* build(int l,int r,son *fa) 77 { 78 if(l>r)return null; 79 int mid=(l+r)>>1; 80 son *x=new son(mid,fa); 81 x->ch[0]=build(l,mid-1,x); 82 x->ch[1]=build(mid+1,r,x); 83 pushup(x); 84 return x; 85 } 86 87 void bianli(son *x) 88 { 89 if(x==null)return ; 90 pushdown(x); 91 bianli(ls(x)); 92 if(x->v!=INF&&x->v!=-INF) 93 printf("%d ",x->v); 94 bianli(rs(x)); 95 } 96 97 int main(){ 98 //freopen("sph.in","r",stdin); 99 //freopen("sph.out","w",stdout); 100 null=new son(0,0);null->size=0; 101 root=new son(-INF,null); 102 root->ch[1]=new son(INF,root);//son(INF,root) 我竟然寫(xiě)成了son(INF,null) 調(diào)了一下午 103 root->ch[0]=null; 104 scanf("%d%d",&n,&m); 105 root->ch[1]->ch[0]=build(1,n,root->ch[1]); 106 root->ch[1]->ch[1]=null; 107 pushup(root->ch[1]); 108 pushup(root); 109 for(int i=1;i<=m;++i) 110 { 111 int qq,ww; 112 scanf("%d%d",&qq,&ww); 113 Splay(qq,ww); 114 } 115 bianli(root); 116 //while(1); 117 return 0; 118 } 刪注釋

?

轉(zhuǎn)載于:https://www.cnblogs.com/A-LEAF/p/7281681.html

總結(jié)

以上是生活随笔為你收集整理的[HZOI 2016][Tyvj 1729]文艺平衡树 这道题我真是哭了,调了一下午,一晚上的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

主站蜘蛛池模板: 少妇精品久久久一区二区三区 | 国产裸体视频 | 九九免费| 精品国产综合 | 黄色小说在线视频 | 中文字幕av在线 | 成人国产精品入口免费视频 | 精品国产乱码久久久久久蜜臀网站 | 日韩第一页 | 色乱码一区二区三区在线男奴 | 亚洲精品乱码久久 | 人妖被c到高潮欧美gay | 69av在线视频| 午夜影院一区二区三区 | 91精品国产91综合久久蜜臀 | 超碰日本 | 大肉大捧一进一出好爽 | 欧美人与性动交g欧美精器 国产在线视频91 | 91午夜理伦私人影院 | 欧美成人精品一区二区 | 久久中文字幕人妻熟av女蜜柚m | 女人18毛片毛片毛片毛片区二 | 日本黄区免费视频观看 | 丰满少妇xbxb毛片日本 | 亚洲欧洲免费无码 | 久久综合一区二区 | 日本少妇毛茸茸高潮 | 精品无码av一区二区三区四区 | 免费在线激情视频 | 肉嫁高柳在线 | 网站黄在线 | 毛片一级在线观看 | 天堂网91| 亚洲涩色| 精品999久久久一级毛片 | 国产福利在线视频观看 | 国内精品久久久久 | 欧美亚洲高清 | 日韩久久久久久 | 一级做a爱片性色毛片 | www.亚洲色图.com | 日本综合色 | 啪啪小视频| 欧美一级在线看 | 黄色片网站在线免费观看 | 婷婷色激情| 国产色中色 | 精品久久久久久久久久久久 | 欧美成人免费观看视频 | av成人在线网站 | 久久九九国产精品 | 女同性做爰全过程 | 成人淫片 | 欧美深性狂猛ⅹxxx深喉 | 久久七| 在线免费观看污视频 | 免费小视频在线观看 | 无码人妻精品一区二区三区夜夜嗨 | 日韩在线视频第一页 | 九一在线视频 | 日本黄色电影网址 | xxx毛片| 性猛交富婆╳xxx乱大交麻豆 | 雪白的扔子视频大全在线观看 | 精品91久久久久久 | 成熟女人毛片www免费版在线 | 日本色影院 | 成av在线 | 成人精品一区二区三区四区 | 特淫毛片 | 中文字幕素人 | 视频在线播放 | 特大黑人巨交吊性xxxxhd | 禁网站在线观看免费视频 | 国语久久 | 成人在线视频一区二区 | 亚洲一区av在线 | 精品国模| 琪琪伦伦影院理论片 | 三级色视频 | jzzijzzij亚洲成熟少妇在线观看 久久久精品人妻一区二区三区 | 韩国三级视频在线 | 色xxxxxx| 色伊人影院 | 日韩一三区| 国产视频最新 | 手机看片欧美日韩 | 国产午夜福利在线播放 | 精品久久久久久久久久久久 | 午夜激情福利在线 | 国产孕妇一区二区三区 | 成人av影院在线观看 | 污污的视频网站在线观看 | 精品一区二区三区视频日产 | 欧美亚洲日本在线 | 国产黄a三级三级看三级 | 欧美一区二区三区婷婷 | 日本高清www免费视频 | 天天操网址|