bzoj 1058: [ZJOI2007]报表统计 (Treap)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1058
题面;
1058: [ZJOI2007]报表统计
Time Limit: 15 Sec Memory Limit: 162 MB
Submit: 4740 Solved: 1568
[Submit][Status][Discuss]
Description
Input
Output
对于每一个“MIN_GAP”和“MIN_SORT_GAP”命令,输出一行答案即可。
Sample Input
5 3 1
INSERT 2 9
MIN_SORT_GAP
INSERT 2 6
MIN_GAP
MIN_SORT_GAP
Sample Output
2
1
HINT
N , M ≤500000 对于所有的数据,序列内的整数不超过5*10^8。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ls t[x].ch[0]
#define rs t[x].ch[1]
const int M = 1e6 + ;
const int inf = 1e9;
int idx,rt,n,m,a[M];
vector<int>g[M];
priority_queue<int,vector<int>,greater<int> > q;
map<int,int>vis;
struct node{
int ch[],cnt,siz,val,rd;
}t[M]; void up(int x){
t[x].siz = t[ls].siz + t[rs].siz + t[x].cnt;
} void rotate(int &x,int d){
int son = t[x].ch[d];
t[x].ch[d] = t[son].ch[d^];
t[son].ch[d^] = x; up(x); up(x = son);
} void ins(int &x,int val){
if(!x){
x = ++idx;
t[x].cnt = t[x].siz = ;
t[x].val = val; t[x].rd = rand();
return ;
}
t[x].siz ++;
if(t[x].val == val){
t[x].cnt ++; return ;
}
int d = t[x].val < val;ins(t[x].ch[d],val);
if(t[x].rd > t[t[x].ch[d]].rd) rotate(x,d);
} int pre(int x,int val){
if(!x) return -inf;
if(t[x].val >= val) return pre(ls,val);
return max(pre(rs,val),t[x].val);
} int nex(int x,int val){
if(!x) return inf;
if(t[x].val <= val) return nex(rs,val);
return min(nex(ls,val),t[x].val);
} int main()
{
int x,y; char op[];
int mn = inf;
scanf("%d%d",&n,&m);
for(int i = ;i <= n;i ++){
scanf("%d",&a[i]);
g[i].push_back(a[i]);
if(i!=){
int x = pre(rt,a[i]+);
int y = nex(rt,a[i]);
mn = min(mn,min(abs(x-a[i]),abs(y-a[i])));
}
ins(rt,a[i]);
}
for(int i = ;i <= n;i ++){
q.push(abs(a[i]-a[i-]));
}
while(m --){
scanf("%s",op);
if(op[] == 'I'){
scanf("%d%d",&x,&y);
g[x].push_back(y);
int len = g[x].size();
int a = pre(rt,y+);
int b = nex(rt,y);
mn = min(mn,min(abs(a-y),abs(b-y)));
ins(rt,y);
q.push(abs(g[x][len-]-y));
if(x != n){
vis[abs(g[x][len-]-g[x+][])]++;
q.push(abs(y-g[x+][]));
}
}
else if(op[]=='G'){
while(!q.empty()){
int num = q.top();
if(!vis[num]) break;
vis[num]--; q.pop();
}
printf("%d\n",q.top());
}
else if(op[]=='S'){
printf("%d\n",mn);
}
}
}
bzoj 1058: [ZJOI2007]报表统计 (Treap)的更多相关文章
- BZOJ 1058: [ZJOI2007]报表统计( 链表 + set )
这种题用数据结构怎么写都能AC吧...按1~N弄个链表然后每次插入时就更新答案, 用set维护就可以了... --------------------------------------------- ...
- [BZOJ 1058] [ZJOI2007] 报表统计 【平衡树】
题目链接:BZOJ - 1058 题目分析 这道题看似是需要在序列中插入一些数字,但其实询问的内容只与相邻的元素有关. 那么我们只要对每个位置维护两个数 Ai, Bi, Ai 就是初始序列中 i 这个 ...
- bzoj 1058: [ZJOI2007]报表统计
Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个 ...
- BZOJ 1058: [ZJOI2007]报表统计 multiset + 卡常
Code: #include<bits/stdc++.h> #define maxn 600000 #define inf 1000000000 using namespace std; ...
- bzoj 1058 [ZJOI2007]报表统计(set)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1058 [题意] 一个序列,提供插入,查询相邻最小差值,查询任意最小差值的操作. [思路 ...
- bzoj 1058: [ZJOI2007]报表统计【set】
我想写FHQtreap的!是set自己跑进代码的!因为太好写了 是有点慢--洛谷上不吸氧会T一个点 就是,用一个set p维护所有点值,ans维护MIN_SORT_GAP的答案,每次insert一个点 ...
- bzoj P1058 [ZJOI2007]报表统计——solution
1058: [ZJOI2007]报表统计 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 4099 Solved: 1390 [Submit][St ...
- 【BZOJ】1058: [ZJOI2007]报表统计(splay+set)
http://www.lydsy.com/JudgeOnline/problem.php?id=1058 当复习一下splay.... 做法很简单..... 观察得知每一次插入一个点只需要维护前后的绝 ...
- 1058: [ZJOI2007]报表统计 - BZOJ
Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个非 ...
随机推荐
- 让自定义view宽高成比例显示
有时候我们自定义一个View,比如ImageView,我们需要让它宽高按照一定的比例显示,例如在ImageView在GridView中显示,GridView设置了3列,由于ImageVIew的宽度会根 ...
- python将两个数组合并成一个数组的两种方法的代码
内容过程中,把写内容过程中常用的内容收藏起来,下面的资料是关于python将两个数组合并成一个数组的两种方法的内容,希望能对小伙伴们有帮助. c1 = ["Red","G ...
- angular部署到iis出现404解决方案
angular应用部署在iis上,刷新出现404 解决方案: 安装 iis URL Rewrite 模块,并在 src 目录下增加web.config,配置urlrewrite如下: <conf ...
- matlab练习程序(对应点集配准的四元数法)
这个算是ICP算法中的一个关键步骤,单独拿出来看一下. 算法流程如下: 1.首先得到同名点集P和X. 2.计算P和X的均值up和ux. 3.由P和X构造协方差矩阵sigma. 4.由协方差矩阵sigm ...
- 关于在Python2中使用列表推导式会遇到的问题
摘自<流畅的Python>第二部分第二章2.2 Python 2.x 中,在列表推导中 for 关键词之后的赋值操作可能会影响列表推导上下文中的同名变量.像下面这个 Python 2.7 ...
- MS SQL自定义函数判断是否正整数
可以写一个函数: 主要是使用正则来判断.另外输入字符是空的话,使用"-"来替换. CREATE FUNCTION [dbo].[svf_NonNegativeInteger] ( ...
- 为Arch Linux安装搜狗输入法
我们在使用电脑的时候很多时候需要输入中文,这个时候如果没有一个中文输入法那么就是一件非常尴尬的事情了.我门现在开始在我们的archlinux来安装sougou输入法 1.我们需要配置我们的源 arch ...
- Log4j分级别保存日志到单个文件中,并记录IP和用户信息
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration S ...
- jquery 选择器、筛选器、事件绑定与事件委派
一.jQuery简介 1.可用的jQuery服务器网站:https://www.bootcdn.cn/ jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTMLdocume ...
- flink如何动态支持依赖jar包提交
通常我们在编写一个flink的作业的时候,肯定会有依赖的jar包.flink官方希望你将所有的依赖和业务逻辑打成一个fat jar,这样方便提交,因为flink认为你应该对自己的业务逻辑做好单元测试, ...