Description

21ZZ 年,冬。
小诚退休以后, 不知为何重新燃起了对物理学的兴趣。 他从研究所借了些实验仪器,整天研究各种微观粒子。这
一天, 小诚刚从研究所得到了一块奇异的陨石样本, 便迫不及待地开始观测。 在精密仪器的视野下,构成陨石
的每个原子都无比清晰。 小诚发现, 这些原子排成若干列, 每一列的结构具有高度相似性。于是,他决定对单
独一列原子进行测量和测试。被选中的这列共有 N 个顺序排列的原子。 最初, 第 i 个原子具有能量 Ei。 随着
时间推移和人为测试, 这列原子在观测上会产生两种变化:
merge x e 当前第 x 个原子和第 x+1 个原子合并,得到能量为 e 的新原子;
insert x e 在当前第 x 个原子和第 x+1 个原子之间插入一个能量为 e 的新原子。
对于一列原子,小诚关心的是相邻一段中能量最大和能量最小的两个原子的能量差值,
称为区间极差。 因此, 除了观测变化外,小诚还要经常统计这列原子的两类数据:
max x y 当前第 x 到第 y 个原子之间的任意子区间中区间极差的最大值;
min x y 当前第 x 到第 y 个原子之间的任意子区间中区间极差的最小值。
其中, 子区间指的是长度至少是 2 的子区间。
小诚坚信这项研究可以获得诺贝尔物理学奖。为了让小诚早日了结心愿,你能否帮助他实现上述的观测和测量呢?

Input

第一行, 两个整数 N, M, 分别表示最初的原子数目和事件总数。
第二行, N 个整数 E1, E2, …, EN, 由空格隔开。依次表示每个原子的能量。
接下来 M 行, 每行为一个字符串和两个整数, 描述一次事件,格式见题目描述。
N<=100,000,M<=100,000
1 ≤ e, Ei ≤ 109。 设 N’ 为当前时刻原子数目。
对于 merge 类事件, 1 ≤ x ≤ N’-1;
对于 insert 类事件, 1 ≤ x ≤ N’;
对于 max 和 min 类事件, 1 ≤ x < y ≤ N’。
任何时刻,保证 N’ ≥ 2。

Output

输出若干行, 按顺序依次表示每次 max 和 min 类事件的测量结果。

Sample Input

4 3

5 8 10 2

max 1 3

min 1 3

max 2 4

Sample Output

5 2 8

分析

用splay维护即可

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 200010
using namespace std;
int fa[N] , c[2][N] , si[N] , w[N] , maxn[N] , minn[N] , dl[N] , dr[N] , ms[N] , root;
char str[10];
int abs(int x)
{return x > 0 ? x : -x;
}
void pushup(int x)
{si[x] = si[c[0][x]] + si[c[1][x]] + 1;dl[x] = c[0][x] ? dl[c[0][x]] : x;dr[x] = c[1][x] ? dr[c[1][x]] : x;maxn[x] = max(w[x] , max(maxn[c[0][x]] , maxn[c[1][x]]));minn[x] = min(w[x] , min(minn[c[0][x]] , minn[c[1][x]]));ms[x] = min(ms[c[0][x]] , ms[c[1][x]]);if(c[0][x]) ms[x] = min(ms[x] , abs(w[x] - w[dr[c[0][x]]]));if(c[1][x]) ms[x] = min(ms[x] , abs(w[x] - w[dl[c[1][x]]]));
}
void build(int l , int r , int f)
{if(l > r) return;int mid = (l + r) >> 1;build(l , mid - 1 , mid) , build(mid + 1 , r , mid);fa[mid] = f , c[mid > f][f] = mid;pushup(mid);
}
void rotate(int &k , int x)
{int y = fa[x] , z = fa[y] , l = (c[1][y] == x) , r = l ^ 1;if(y == k) k = x;else c[c[1][z] == y][z] = x;fa[x] = z , fa[y] = x , fa[c[r][x]] = y , c[l][y] = c[r][x] , c[r][x] = y;pushup(y) , pushup(x);
}
void splay(int &k , int x)
{while(x != k){int y = fa[x] , z = fa[y];if(y != k){if((c[0][z] == y) ^ (c[0][y] == x)) rotate(k , x);else rotate(k , y);}rotate(k , x);}
}
int find(int k , int x)
{if(x <= si[c[0][k]]) return find(c[0][k] , x);else if(x > si[c[0][k]] + 1) return find(c[1][k] , x - si[c[0][k]] - 1);else return k;
}
int split(int l , int r)
{int a = find(root , l - 1) , b = find(root , r + 1);splay(root , a) , splay(c[1][root] , b);return c[0][c[1][root]];
}
int main()
{int n , m , i , x , y , t , tot;scanf("%d%d" , &n , &m) , tot = n + 2;for(i = 2 ; i <= n + 1 ; i ++ ) scanf("%d" , &w[i]);maxn[0] = 0 , minn[0] = ms[0] = 0x3fffffff;build(1 , n + 2 , 0) , root = (n + 3) >> 1;while(m -- ){scanf("%s%d%d" , str , &x , &y);switch(str[1]){case 'e': t = split(x + 1 , x + 2) , c[0][t] = c[1][t] = 0 , w[t] = y ,pushup(t) , pushup(c[1][root]) , pushup(root); break;case 'n': split(x + 2 , x + 1) , c[0][c[1][root]] = ++tot , w[tot] = y , fa[tot] = c[1][root] ,pushup(tot) , pushup(c[1][root]) , pushup(root); break;case 'a': t = split(x + 1 , y + 1) , printf("%d\n" , maxn[t] - minn[t]); break;default: printf("%d\n" , ms[split(x + 1 , y + 1)]);}}return 0;
}

BZOJ 4864: [BeiJing 2017 Wc]神秘物质相关推荐

  1. BZOJ 4864: [BeiJing 2017 Wc]神秘物质 解题报告

    4864: [BeiJing 2017 Wc]神秘物质 Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子. ...

  2. [BZOJ]4864: [BeiJing 2017 Wc]神秘物质

    题解:  操作1 分解为删除一个元素和修改一个元素的权值 操作2:插入一个元素 操作3:查询区间里面子区间的极差最大值  等价于直接求区间最大值减去区间最小值 操作4:查询区间子区间里面极差最小值  ...

  3. bzoj 4864: [BeiJing 2017 Wc]神秘物质 splay

    Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研究所得到了一块奇异的陨石样本, 便 ...

  4. 4864: [BeiJing 2017 Wc]神秘物质

    4864: [BeiJing 2017 Wc]神秘物质 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 92 Solved: 50 [Submit][S ...

  5. bzoj4864: [BeiJing 2017 Wc]神秘物质

    4864: [BeiJing 2017 Wc]神秘物质 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 99  Solved: 56 [Submit] ...

  6. 【BZOJ4864】[BeiJing 2017 Wc]神秘物质 Splay

    [BZOJ4864][BeiJing 2017 Wc]神秘物质 Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微 ...

  7. BZOJ_4864_[BeiJing 2017 Wc]神秘物质_Splay

    BZOJ4864_[BeiJing 2017 Wc]神秘物质_Splay Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天 ...

  8. bzoj4864 [BeiJing 2017 Wc]神秘物质

    (http://www.elijahqi.win/2018/01/26/bzoj4864-beijing-2017-wc%E7%A5%9E%E7%A7%98%E7%89%A9%E8%B4%A8/%20 ...

  9. BZOJ4864[BeiJing 2017 Wc]神秘物质——非旋转treap

    题目描述 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研究所得到了一块奇异的陨石样本, 便迫不及待地开始 ...

最新文章

  1. Kotlin 使用list.add 时候报错的处理方法
  2. 计算机应用房地产,房地产板块弱市吸金 逾30亿撤离计算机应用板块
  3. 基于Annotation的输入校验
  4. python爬虫入门代码-Python爬虫入门
  5. service mesh istio-0.8安装测试
  6. 数据结构括号匹配代码_栈:如何实现有效括号的判断?
  7. 吴恩达机器学习 8.应用机器学习的建议
  8. YOLO学习笔记4——YOLOV2详解+论文解读
  9. OSG绘制空间凹多边形以及透明效果的实现
  10. 如何在虚拟机上写c语言程序吗,c语言初级(一)——如何在虚拟机里写代码
  11. java4android网易云_仿照网易云音乐界面 android特效
  12. easypoi excel:Cannot add merged region X to sheet because it overlaps with an existing merged region
  13. 计算机描绘的基因结构图,傻瓜式图文教程:Genecards基因信息检索与分析、基因结构图绘制.........
  14. 服务器路由器无线ap,TP-Link TL-WR841N路由器无线AP设置方法
  15. Foxmail不显示图片的处理方法
  16. 离散数学 2.3 Functions
  17. Flink问题记录:A raw type backed by type information has no serializable string representation. It ....
  18. qt webview 忽略 ssl错误 ignoreSslErrors
  19. Novavax向美国提交新冠疫苗紧急使用授权申请;西门子医疗发布最新业绩 | 医药健闻...
  20. C++ 类的交叉引用

热门文章

  1. 用 22 张照片打开 23 年
  2. [深度学习]Part1 Python学习进阶Ch23爬虫Spider——【DeepBlue学习笔记】
  3. 2021年线上线下融合会议需求增长,Hilton EventReady Hybrid Solutions将启动
  4. C语言 五子棋游戏(也可n子棋)
  5. 中国超高分子量聚乙烯UHMWPE市场竞争状况与发展趋势分析报告2022-2028年
  6. 数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum分页,视图,序列,索引
  7. 特斯拉数字车钥匙卡评价
  8. zzulioj:1168: 账单(指针专题)
  9. 朴素贝叶斯——垃圾邮件过滤
  10. 理解中国经济的五层思维-中国视角下的宏观经济