【bzoj4864】神秘物质

123

  1 #include<cstdio>
  2 #include<cstring>
  3 #include<algorithm>
  4 using namespace std;
  5 int n,m,a[200010];
  6 namespace splay{
  7     #define lson(x) t[x].lc
  8     #define rson(x) t[x].rc
  9     #define fa(x) t[x].fa
 10     struct tree{
 11         int lc,rc,fa;
 12         int size,val,maxn,minn;
 13         int delta,ans;
 14     }t[200010]={0};
 15     int root=0,cnt=0;
 16     void pushup(int x){
 17         t[x].size=t[lson(x)].size+t[rson(x)].size+1;
 18         t[x].maxn=max(t[x].val,max(t[lson(x)].maxn,t[rson(x)].maxn));
 19         t[x].minn=t[x].val;
 20         if(lson(x))
 21             t[x].minn=min(t[x].minn,t[lson(x)].minn);
 22         if(rson(x))
 23             t[x].minn=min(t[x].minn,t[rson(x)].minn);
 24         t[x].ans=t[x].delta;
 25         if(lson(x))
 26             t[x].ans=min(t[x].ans,t[lson(x)].ans);
 27         if(rson(x))
 28             t[x].ans=min(t[x].ans,t[rson(x)].ans);
 29         return;
 30     }
 31     int build(int l,int r){
 32         int mid=(l+r)>>1,s=++cnt;
 33         t[s].val=a[mid];
 34         t[s].delta=(mid)?abs(a[mid]-a[mid-1]):0x3f3f3f3f;
 35         if(l<mid){
 36             lson(s)=build(l,mid-1);
 37             fa(lson(s))=s;
 38         }
 39         if(mid<r){
 40             rson(s)=build(mid+1,r);
 41             fa(rson(s))=s;
 42         }
 43         pushup(s);
 44         return s;
 45     }
 46     int find(int k){
 47         int p=root;
 48         while(true){
 49             if(t[lson(p)].size>=k)
 50                 p=lson(p);
 51             else if(t[lson(p)].size+1==k)
 52                 return p;
 53             else{
 54                 k-=t[lson(p)].size+1;
 55                 p=rson(p);
 56             }
 57         }
 58     }
 59     void rotate(int x){
 60         int fa=fa(x);
 61         if(fa==root)
 62             root=x;
 63         if(x==lson(fa)){
 64             lson(fa)=rson(x);
 65             fa(rson(x))=fa;
 66             rson(x)=fa;
 67             fa(x)=fa(fa);
 68             if(root!=x){
 69                 if(fa==lson(fa(fa)))
 70                     lson(fa(fa))=x;
 71                 else
 72                     rson(fa(fa))=x;
 73             }
 74             fa(fa)=x;
 75         }
 76         else{
 77             rson(fa)=lson(x);
 78             fa(lson(x))=fa;
 79             lson(x)=fa;
 80             fa(x)=fa(fa);
 81             if(root!=x){
 82                 if(fa==lson(fa(fa)))
 83                     lson(fa(fa))=x;
 84                 else
 85                     rson(fa(fa))=x;
 86             }
 87             fa(fa)=x;
 88         }
 89         pushup(fa);
 90         pushup(x);
 91         return;
 92     }
 93     void splay(int x,int y){
 94         while(fa(x)!=y){
 95             if(fa(fa(x))==y){
 96                 rotate(x);
 97                 return;
 98             }
 99             int a=(x==lson(fa(x)))?1:-1;
100             int b=(fa(x)==lson(fa(fa(x))))?1:-1;
101             if(a*b==1){
102                 rotate(fa(x));
103                 rotate(x);
104             }
105             else{
106                 rotate(x);
107                 rotate(x);
108             }
109         }
110         return;
111     }
112     void insert(int x,int y){
113         splay(find(x),0);
114         splay(find(x+1),root);
115         lson(rson(root))=++cnt;
116         fa(cnt)=rson(root);
117         t[cnt].size=1;
118         t[cnt].val=t[cnt].maxn=t[cnt].minn=y;
119         t[cnt].delta=t[cnt].ans=abs(t[root].val-y);
120         t[rson(root)].delta=abs(t[rson(root)].val-y);
121         pushup(rson(root));
122         pushup(root);
123         return;
124     }
125     void del(int x){
126         splay(find(x-1),0);
127         splay(find(x+1),root);
128         lson(rson(root))=0;
129         t[rson(root)].delta=abs(t[root].val-t[rson(root)].val);
130         pushup(rson(root));
131         pushup(root);
132     }
133     int querymaxn(int l,int r){
134         splay(find(l-1),0);
135         splay(find(r+1),root);
136         return t[lson(rson(root))].maxn-t[lson(rson(root))].minn;
137     }
138     int queryminn(int l,int r){
139         splay(find(l-1),0);
140         splay(find(r+1),root);
141         return t[lson(rson(root))].ans;
142     }
143     #undef lson
144     #undef rson
145     #undef fa
146 }
147 int main(){
148     scanf("%d%d",&n,&m);
149     for(int i=1;i<=n;i++)
150         scanf("%d",a+i);
151     a[0]=0x3f3f3f3f;
152     a[n+1]=-0x3f3f3f3f;
153     splay::root=splay::build(0,n+1);
154     scanf("%d",&m);
155     while(m--){
156         char op[6];int x,y;
157         scanf("%s%d%d",op,&x,&y);
158         if(op[0]==‘i‘)
159             splay::insert(x+1,y);
160         else if(op[1]==‘e‘){
161             splay::del(x+1);
162             splay::del(x+1);
163             splay::insert(x,y);
164         }
165         else if(op[1]==‘a‘)
166             printf("%d\n",splay::querymaxn(x+1,y+1));
167         else
168             printf("%d\n",splay::queryminn(x+2,y+1));
169     }
170     return 0;
171 }

原文地址:https://www.cnblogs.com/gzez181027/p/bzoj4864.html

时间: 2024-11-05 14:39:01

【bzoj4864】神秘物质的相关文章

【Foreign】神秘物质 [Splay]

神秘物质 Time Limit: 10 Sec  Memory Limit: 256 MB Description Input Output Sample Input Sample Output 1 2 1 5 HINT Main idea 每个点有一个权值,维护一个结构,支持合并相邻两点,删除单点,加入单点,查询区间子集极差的最大值和最小值. Solution 首先我们可以发现,区间子集极差的最大值显然就是整个区间的最大值-区间最小值,然后区间子集极差最小值只有相邻点的才会产生贡献. 那么我们

【bzoj4864】[BeiJing 2017 Wc]神秘物质 Splay

原文地址:http://www.cnblogs.com/GXZlegend/p/6801631.html 题目描述 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这一天, 小诚刚从研究所得到了一块奇异的陨石样本, 便迫不及待地开始观测. 在精密仪器的视野下,构成陨石的每个原子都无比清晰. 小诚发现, 这些原子排成若干列, 每一列的结构具有高度相似性.于是,他决定对单独一列原子进行测量和测试.被选中的这列共有 N 个顺序排列

bzoj4864: [BeiJing 2017 Wc]神秘物质

这道题维护区间极差的最小值 只有长度为二的区间有贡献 这个可以尝试画一下 自己想想 这样之后维护的值有 区间最小值 区间最大值 以及区间内长度为二的区间差的最小值 区间大小 点本身的值. 注意要看你维护的区间差在区间左点还是右点 这在查询min的时候很重要 剩下的自己看把 代码不算长的了 虽然有点慢 换成结构体应该会快很多 #include<cstdio> #include<cstring> #include<algorithm> using namespace std

#4864. [BeiJing 2017 Wc]神秘物质 [FHQ Treap]

这题其实挺简单的,有个东西可能稍微难维护了一点点.. \(merge\ x\ e\) 当前第 \(x\) 个原子和第 \(x+1\) 个原子合并,得到能量为 \(e\) 的新原子: \(insert\ x\ e\) 在当前第 \(x\) 个原子和第 \(x+1\) 个原子之间插入一个能量为 \(e\) 的新原子. \(max\ x\ y\) 当前第 \(x\) 到第 \(y\) 个原子之间的任意子区间中区间极差的最大值: \(min\ x\ y\) 当前第 \(x\) 到第 \(y\) 个原子之

精子活力

二.引起精子活力低下的病因较多.归纳起来主要有以下几类是引起男子不育症的重要原因之一: 1.精索静脉曲张:由于精索静脉曲张导致毒性代谢产物CO2.类固醇.儿茶酚胺或前列腺素增多,到达睾丸而产生不良影响.同时睾丸局部瘀血,气血平衡失调,使精子形态及活动力受到影响. 2.生殖道感染:前列腺炎及精囊炎可影响到精液质量.其它如解脲支原体的感染及全身感染性疾病也可造成精子活力低下的发生. 3.理化因素的影响:药物.有机溶剂.烟酒.阴囊过热及环境污染,如:放射性.重金属.杀虫剂.化学毒物等,都可以引起精子活

学术会议高手速成之七种武器

学术江湖,虽无刀光剑影,却有血雨腥风.博士路上,漫漫修远,切磋技艺印证武功街头火拼胡同拍砖,大小战役,不可计数.一年数度之大型学术会议,更是群雄争锋之处华山论剑之时.回首五年江湖,西窗残阳似血,不胜唏嘘.暗观镜中博士帽上缨穗,犹感血迹斑斓,森然欲滴.遂决意退隐江湖葬剑青山,立志面朝大海春暖花开,再不过问学术界的是非恩怨.此五年心智武功,尽录于此,拳拳之心,皆为君故,诸位好生研习修炼,笑傲江湖之日,长歌烈酒,勿忘相邀.  第一种武器 长生剑 如果你想要一种最安全的武器闯荡江湖,你需要的是一把剑.连

中华神草新零售野山参的功效

野山参--凭什么被称作"神草"?野山参在2000多年前的<神农本草经>中就有记载,"主补五脏,安精神,定魂魄,止惊悸,除邪气,明目,开心益智,久服轻身延年",更在<本草纲目>中被李时珍称为"神草",而在现代生活中,野山参也会经常被用作补元气,安精神的良药.野山参不仅有补虚救脱.大补元气的功效,能强精健身益寿延年.服用野山参的好处:1.提高工作思维能力.减少疲劳野山参中皂苷 Rg1 能够兴奋中枢神经,加强大脑皮层的兴奋程度,

神秘花园

一个孩子远离了人群,走到一个神秘的花园.就那么一瞬间,他被深深地吸引,人群中的嘈杂渐渐朦胧,远去,像是梦里一般......他开始忘却周围的一切,专注得像是刚来到这个世界.他用眼睛,用鼻子,用耳朵,用一切上帝赐予他的知觉力去感受花园里的一切.每一棵草,每一朵花,每一声鸟儿的啼叫,每一缕清风,每一朵云......仿佛自己融入其中,化为一体.他开始有所感悟:什么是真正的快乐,什么是真正的爱,我如何能得到?是我所能感受到的美好的万物吗? 与此同时,上帝正路过人间,感受到了孩子的心声,他惊诧是什么样的一颗

反应扩散方程与图灵图(世间万物神秘的斑图)

1952年,被后人称为计算机科学之父的著名英国数学家图灵(A.M.Turing)把他的目光转向生物学领域.他在著名论文"形态形成的化学基础"中nl,用一个反应扩散模型成功地说明了某些生物体表面所显示的图纹(如斑马身上的斑图)是怎样产生的 . 你或许会疑惑,斑马的条纹.猎豹的斑纹是怎样形成的等等,计算机之父图灵已经给我们明确的解释,或许我们可以从化学反应中得到一些启示,最经典的莫过于b-z反应了,这种反应扩散系统的随机性是其对称性遭到突破,也就是这种系统存在着失去稳定的情况.系统往往伴随