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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

BZOJ1895: Pku3580 supermemo Splay

發(fā)布時(shí)間:2023/12/16 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ1895: Pku3580 supermemo Splay 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

BZOJ1895: Pku3580 supermemo

Time Limit:?15 Sec??Memory Limit:?64 MB Submit:?291??Solved:?119 [Submit][Status][Discuss] 題解: Splay裸題 關(guān)于REVOLVE操作,不難想其實(shí)是一個(gè)區(qū)間平移操作 區(qū)間平移操作我是這樣寫的: 先把T模一下區(qū)間長度,防止它轉(zhuǎn)回來。 這樣相當(dāng)于把后面的T(取模后的)個(gè)數(shù)字,挪到區(qū)間的前面來 這樣先把[r-T+1,r]旋轉(zhuǎn)出來,然后記一下區(qū)間在樹上最上面的點(diǎn),把它和父親斷開,把父親Pushup,然后在旋轉(zhuǎn)出[l,l-1],把剛才記的節(jié)點(diǎn)和他連上就OK,再Pushup一下上面的點(diǎn) #include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> using namespace std; const int N=200005; int n,m,root,ls[N],rs[N],fa[N],siz[N],mn[N],rev[N],plu[N],a[N],cnt; void Pushup(int x) {siz[x]=siz[ls[x]]+siz[rs[x]]+1;mn[x]=min(a[x],min(mn[ls[x]],mn[rs[x]])); } void Pplu(int x,int v) {if(!x) return;a[x]+=v;mn[x]+=v;plu[x]+=v; } void Prev(int x) {if(!x) return;swap(ls[x],rs[x]);rev[x]^=1; } void Pushdown(int x) {if(plu[x]){Pplu(ls[x],plu[x]),Pplu(rs[x],plu[x]);plu[x]=0;}if(rev[x]){Prev(ls[x]),Prev(rs[x]);rev[x]=0;} } void Rotate(int x,int &k) {int y=fa[x],z=fa[y];if(k==y) k=x;else{if(ls[z]==y) ls[z]=x;else rs[z]=x;}fa[x]=z;fa[y]=x;if(x==ls[y]){ls[y]=rs[x];fa[rs[x]]=y;rs[x]=y;}else{rs[y]=ls[x];fa[ls[x]]=y;ls[x]=y;}Pushup(y);Pushup(x); } void Splay(int x,int &k) {while(x!=k){int y=fa[x],z=fa[y];if(y!=k){if(y==ls[z]^x==ls[y]) Rotate(x,k);else Rotate(y,k);}Rotate(x,k);} } int Find(int x,int rank) {Pushdown(x);if(rank<=siz[ls[x]]) return Find(ls[x],rank);else if(rank==siz[ls[x]]+1) return x;else return Find(rs[x],rank-siz[ls[x]]-1); } int Make(int x,int y) {x=Find(root,x),y=Find(root,y+2);Splay(x,root);Splay(y,rs[x]);return ls[y]; } void Build(int l,int r,int f) {if(l>r) return;if(l==r){siz[l]=1;mn[l]=a[l];fa[l]=f;if(l<f) ls[f]=l;else rs[f]=l;}int mid=(l+r)>>1;Build(l,mid-1,mid);Build(mid+1,r,mid);Pushup(mid);fa[mid]=f;if(mid<f) ls[f]=mid;else rs[f]=mid; } int l,r,x,y,v; void Add() {scanf("%d%d%d",&l,&r,&v);x=Make(l,r);Pplu(x,v); } void Insert() {scanf("%d%d",&l,&v);x=Find(root,l+1),y=Find(root,l+2);Splay(x,root);Splay(y,rs[x]);ls[y]=++cnt;fa[cnt]=y;siz[cnt]=1;a[cnt]=v;mn[cnt]=v;Pushup(y); } void Delete() {scanf("%d",&l);x=Make(l,l);ls[fa[x]]=0;Pushup(fa[x]); } void Min() {scanf("%d%d",&l,&r);x=Make(l,r);printf("%d\n",mn[x]); } void Reverse() {scanf("%d%d",&l,&r);x=Make(l,r);Prev(x); } void Revolve() {scanf("%d%d%d",&l,&r,&v);v%=(r-l+1);if(v==0) return;int p=Make(r-v+1,r);ls[fa[p]]=0;Pushup(fa[p]);x=Find(root,l),y=Find(root,l+1);Splay(x,root);Splay(y,rs[x]);ls[y]=p;fa[p]=y;Pushup(y); } int main() {scanf("%d",&n);memset(mn,0x3f,sizeof(mn));memset(a,0x3f,sizeof(a));for(int i=2;i<=n+1;i++) scanf("%d",&a[i]);root=(n+3)>>1;Build(1,n+2,0);cnt=n+2;scanf("%d",&m);char c[10];while(m--){scanf("%s",c);if(c[0]=='A') Add();else if(c[0]=='I') Insert();else if(c[0]=='D') Delete();else if(c[0]=='M') Min();else if(c[3]=='E') Reverse();else Revolve();} }

Description

給出一個(gè)初始序列fA1;A2;:::Ang,要求你編寫程序支持如下操作: 1. ADDxyD:給子序列fAx:::Ayg的每個(gè)元素都加上D。例如對(duì)f1,2, 3,4,5g執(zhí)行"ADD 241" 會(huì)得到f1,3,4,5,5g。 2. REVERSExy:將子序列fAx:::Ayg翻轉(zhuǎn)。例如對(duì)f1,2,3,4,5g執(zhí) 行"REVERSE 24"會(huì)得到f1,4,3,2,5g。 3. REVOLVExyT:將子序列fAx:::Ayg旋轉(zhuǎn)T個(gè)單位。例如, 對(duì)f1,2,3,4,5g執(zhí)行"REVOLVE 242"會(huì)得到f1,3,4,2,5g。 4. INSERTxP:在Ax后插入P。例如,對(duì)f1,2,3,4,5g執(zhí)行"INSERT 24"會(huì)得到f1,2,4,3,4,5g。 5. DELETEx:刪去Ax。例如,對(duì)f1,2,3,4,5g執(zhí)行"DELETE 2"會(huì)得 到f1,3,4,5g。 6. MINxy:查詢子序列fAx:::Ayg中的最小元素。例如,對(duì)于序列f1, 2,3,4,5g,詢問"MIN 24"的返回應(yīng)為2。

Input

第一行包含一個(gè)整數(shù)n,表示初始序列的長度。 以下n行每行包含一個(gè)整數(shù),描述初始的序列。 接下來一行包含一個(gè)整數(shù)m,表示操作的數(shù)目。 以下m行每行描述一個(gè)操作。

Output

對(duì)于所有"MIN"操作,輸出正確的答案,每行一個(gè)。

Sample Input

5
1
2
3
4
5
2
ADD 2 4 1
MIN 4 5

Sample Output

5

HINT

輸入、輸出以及中間運(yùn)算結(jié)果均不會(huì)超過32位整數(shù)。
對(duì)于30%的數(shù)據(jù),n;m 6 1000;
對(duì)于100%的數(shù)據(jù),n;m 6 100000。

Source

[Submit][Status][Discuss]

總結(jié)

以上是生活随笔為你收集整理的BZOJ1895: Pku3580 supermemo Splay的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产香蕉久久 | 无人在线观看的免费高清视频 | 五月婷婷欧美 | 日韩av影片 | 男人都懂的网址 | 最近中文字幕第一页 | 日本丰满少妇 | 一级空姐毛片 | 亚洲自拍偷拍图 | 公车激情云雨小说 | 日本中文字幕不卡 | 一区二区亚洲视频 | 免费在线看黄网站 | 成人黄色av网站 | 亚洲大尺度av | 老熟女一区二区三区 | 日韩不卡免费视频 | 手机电影在线观看 | 91美女高潮出水 | 超碰caopeng| 性高潮免费视频 | 欧美aa大片| 日本羞羞网站 | 91吃瓜今日吃瓜入口 | 青青在线视频观看 | 老熟妇高潮一区二区三区 | 日韩免费在线观看视频 | 麻豆视频一区二区三区 | av基地 | 中文写幕一区二区三区免费观成熟 | 亚洲午夜一区 | 国产剧情自拍 | 精品不卡一区二区三区 | 精品一区二区三区电影 | 色图一区 | 日韩少妇内射免费播放 | 日韩人妻无码精品久久久不卡 | 男女免费视频 | 亚洲综合图区 | 超碰caopeng | 都市激情自拍偷拍 | 精品亚洲精品 | 一区二区三区黄色录像 | 久久久精品国产免费爽爽爽 | 涩涩涩涩涩涩涩涩涩涩 | 三级国产在线 | 精品美女一区二区 | 青娱乐av在线 | 精品乱码一区二区三四区视频 | 91久久人澡人人添人人爽欧美 | 久久精品亚洲天堂 | 男女视频网站 | 激情欧美一区 | 澳门一级黄色片 | 爱蜜臀av | 国产av不卡一区二区 | aa视频在线观看 | 日本在线观看中文字幕 | 亚洲中文字幕无码一区 | 91成年影院 | 久久精品视 | 97在线超碰| 国产视频第二页 | 内谢少妇xxxxx8老少交视频 | 亚洲卡一卡二卡三 | 精品国产乱码久久久久夜深人妻 | 欧美黄色录像视频 | 91网在线看 | 日韩不卡一区二区三区 | 亚洲精品一区二区18漫画 | 国产国语老龄妇女a片 | 国产日韩一区二区在线观看 | 国产99色| 成人av在线电影 | 国产波霸爆乳一区二区 | 中文字幕国产日韩 | 久久精品视频网 | 色八戒av | 一级全黄男女免费大片 | 日本中文字幕在线观看视频 | 日本一区二区视频 | exo妈妈mv在线播放高清免费 | 美女隐私黄www网站动漫 | 日本无遮挡边做边爱边摸 | 欧美一区二区三区黄色 | 美女作爱网站 | 欧美十大老熟艳星 | 91精品婷婷国产综合久久蝌蚪 | 人人射人人插 | 超碰66 | 国产在线观看免费视频软件 | 91精品人妻一区二区 | 午夜免费看 | 精品久久久久久久久久久国产字幕 | 一区二区三区免费看 | 久久午夜鲁丝 | 丝袜黄色片| 国产日本在线播放 | 国产六区 |