BZOJ 1058: [ZJOI2007]报表统计 multiset + 卡常
Description
Input
Output
对于每一个“MIN_GAP”和“MIN_SORT_GAP”命令,输出一行答案即可
题解:
开两个平衡树.
一个直接维护权值,另一个维护相邻两数差值.
考虑每次插入一个数 $x$,会造成怎样的影响:
对于 MIN_SORT_GAP,直接查询一下 $x$ 在第一颗平衡树中的前驱与后继并更新一下答案即可.
对于 MIN_GAP,直接删除一个相邻差值,并插入两个新的差值即可.
上述操作都不难用 multiset 来解决.
#include<bits/stdc++.h>
#define maxn 600000
#define inf 1000000000
using namespace std;
void setIO(string s)
{
string in=s+".in", out=s+".out";
freopen(in.c_str(),"r",stdin);
// freopen(out.c_str(),"w",stdout);
}
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
multiset<int>S1, S2;
multiset<int>::iterator ita, itb;
vector<int>q[maxn];
char str[maxn];
int Arr[maxn],st[maxn],ed[maxn];
int main()
{
// setIO("input");
int n,m,i,j,a,b, c1,c2, minv=inf;
n=read(),m=read();
for(i=1;i<=n;++i) st[i]=ed[i]=Arr[i]=a=read(), S2.insert(a);
sort(Arr+1,Arr+1+n);
for(i=2;i<=n;++i)
{
minv=min(minv, abs(Arr[i]-Arr[i-1]));
S1.insert(abs(st[i]-st[i-1]));
}
S2.insert(-inf); S2.insert(inf);
st[0]=ed[0]=st[n+1]=ed[n+1]=inf;
while(m--)
{
scanf("%s",str);
if(str[0]=='I')
{
a=read(),b=read();
S1.erase(S1.lower_bound(abs(ed[a] - st[a+1])));
S1.insert(abs(b - ed[a]));
S1.insert(abs(b - st[a+1]));
ed[a]=b; ita=S2.lower_bound(b);
minv=min(minv, abs((*ita)-b));
ita--;
minv=min(minv, abs((*ita)-b));
S2.insert(b);
}
if(str[4]=='G') printf("%d\n",(*S1.begin()));
if(str[4]=='S')
{
printf("%d\n",minv);
}
}
return 0;
}
BZOJ 1058: [ZJOI2007]报表统计 multiset + 卡常的更多相关文章
- BZOJ 1058: [ZJOI2007]报表统计( 链表 + set )
这种题用数据结构怎么写都能AC吧...按1~N弄个链表然后每次插入时就更新答案, 用set维护就可以了... --------------------------------------------- ...
- bzoj 1058: [ZJOI2007]报表统计 (Treap)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1058 题面; 1058: [ZJOI2007]报表统计 Time Limit: 15 Sec ...
- [BZOJ 1058] [ZJOI2007] 报表统计 【平衡树】
题目链接:BZOJ - 1058 题目分析 这道题看似是需要在序列中插入一些数字,但其实询问的内容只与相邻的元素有关. 那么我们只要对每个位置维护两个数 Ai, Bi, Ai 就是初始序列中 i 这个 ...
- bzoj 1058: [ZJOI2007]报表统计
Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个 ...
- 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 ...
- 1058: [ZJOI2007]报表统计 - BZOJ
Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个非 ...
- 【BZOJ】1058: [ZJOI2007]报表统计(splay+set)
http://www.lydsy.com/JudgeOnline/problem.php?id=1058 当复习一下splay.... 做法很简单..... 观察得知每一次插入一个点只需要维护前后的绝 ...
随机推荐
- Lint工具去除Android工程里不再需要的资源
摘要: 在项目开发过程中常常会不断改UI设计,于是在定稿要发布的前夕,发现有好多不再需要的资源文件存在,发布的包会把这些无用的资源都包含在里面,造成APK的下载包过大.可以通过Android SDK自 ...
- hdu 2665 Kth number(划分树)
Kth number Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- Android学习笔记-tween动画之java实现
Android动画分为Tween动画和Frame动画,近期学习了,体tween动画,现在讲学习的心得以及相关知识介绍如下. Tween又称为补间动画,可以把对象进行缩小.放大.旋转和渐变等操作. ...
- JavaScript图片裁剪
1.jquery 图片裁剪库选择 Jcrop:http://deepliquid.com/content/Jcrop.html imgareaselect:http://odyniec.net/pro ...
- VS-按F12无法跳转到函数定义,点击右键也无法跳转
工具->选项->项目和解决方案->常规,把“在解决方案资源管理器中跟踪活动项”反选.
- YTU 2547: Repairing a Road
2547: Repairing a Road 时间限制: 1 Sec 内存限制: 128 MB 提交: 3 解决: 2 题目描述 You live in a small town with R b ...
- lodop
一.控件参数 Lodop有如下控件参数,以页面object对象元素的参数形式使用: Caption名称:设置控件的显示标题格式: < pa ram name="Caption" ...
- 9 Range 实用操作
9.1 剪切.复制和粘贴来移动数据 sourceRange.Cut [Destination] 如果指定Destination,相当于Ctrl^X(sourceRange) & Ctrl^V( ...
- maven仓库管理
maven仓库管理很重要,如果是依赖jar下不到或下错了或出现莫名的报错.曾几何时为此花费了不少时间. 首先,注意自己maven仓库配置,里面有本地仓库目录和远程maven仓库,当自己本地没有依赖时可 ...
- 论文翻译-SELF TRAINING AUTONOMOUS DRIVING AGENT
文献地址 链接:https://pan.baidu.com/s/1gHrpnOf1FXLp9u8OJ2-oCg 提取码:y2w6 作者 Shashank Kotyan, Danilo Vasconce ...