SCP-bzoj-1058
项目编号:bzoj-1058
项目等级:Safe
项目描述:
特殊收容措施:
STL好题。维护两个set,一个存储数列里相邻元素差,另一个存储整个数列。
对于MIN_SORT_GAP操作,维护一个ans表示答案,每个INSERT操作时通过第二个set更新即可。
针对INSERT操作的特性,我们可以在原数列每个元素下挂一个链,对于INSERT i k,即在第i条链末端插入k。可以进一步发现在插入过程中每条链只有两端对数列中相邻元素差有贡献,可以进一步优化空间。
那么对于MIN_GAP操作,每个INSERT操作时,记新插入元素为x,其前驱后继分别为y,z(如果存在的话),在第一个set内弹出|y-z|并插入|x-y|和|x-z|。
这样复杂度O(mlog2(n+m))。
附录:
#include <bits/stdc++.h>
#define range(i,c,o) for(register int i=(c);i<(o);++i)
#define dange(i,c,o) for(register int i=(c);i>(o);--i)
using namespace std; //#define __debug
#ifdef __debug
#define Function(type) type
#define Procedure void
#else
#define Function(type) __attribute__((optimize("-O2"))) inline type
#define Procedure __attribute__((optimize("-O2"))) inline void
#endif static const int INF=0x7f7f7f7f; //quick_io BEGIN HERE
Function(int) getint()
{
char c=getchar(); for(;!isdigit(c)&&c!='-';c=getchar());
short s=; for(;c=='-';c=getchar()) s*=-; int r=;
for(;isdigit(c);c=getchar()) r=(r<<)+(r<<)+c-'';
return s*r;
}
//quick_io END HERE multiset<int> rec1,rec2;
int top[],bot[];
static int ans=INF,n=getint(),m=getint();
#define PUSH(x) rec1.insert(x)
#define POP(x) rec1.erase(rec1.find(x))
Procedure INSERT1(const int&k,const int&x)
{
PUSH(abs(x-bot[k ]));
if(k<n)
{
PUSH(abs(x-top[k+]));
POP(abs(bot[k]-top[k+]));
}
}
Procedure INSERT2(const int&x)
{
multiset<int>::iterator it=rec2.insert(x);
if(it!=rec2.begin()) ans=min(ans,x-*--it),++it;
if(++it!=rec2.end()) ans=min(ans,*it - x) ;
} int main()
{
rec1.clear(),rec2.clear();
range(i,,n+)
{
top[i]=bot[i]=getint();
if(i>) PUSH(abs(bot[i-]-top[i]));
INSERT2(top[i]);
}
while(m--)
{
char c; while(isspace(c=getchar()));
if(c=='I')
{
int k=getint(),x=getint();
INSERT1(k,x),INSERT2(x),bot[k]=x;
continue;
}
while(getchar()!='_'); c=getchar();
while(!isspace(getchar()));
printf("%d\n",c=='G'?*rec1.begin():ans);
}
return ;
}
SCP-bzoj-1058的更多相关文章
- [BZOJ 1058] [ZJOI2007] 报表统计 【平衡树】
题目链接:BZOJ - 1058 题目分析 这道题看似是需要在序列中插入一些数字,但其实询问的内容只与相邻的元素有关. 那么我们只要对每个位置维护两个数 Ai, Bi, Ai 就是初始序列中 i 这个 ...
- [BZOJ 1058] 报表统计
Link: BZOJ 1058 传送门 Solution: 为了这道题今天下午一直都在和常数大战…… 1.对于询问1,我们记录每个数末位置的数$T[i]$和初始位置$S[i]$ 用平衡树维护所有差值, ...
- bzoj 1058 [ZJOI2007]报表统计(set)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1058 [题意] 一个序列,提供插入,查询相邻最小差值,查询任意最小差值的操作. [思路 ...
- BZOJ 1058: [ZJOI2007]报表统计( 链表 + set )
这种题用数据结构怎么写都能AC吧...按1~N弄个链表然后每次插入时就更新答案, 用set维护就可以了... --------------------------------------------- ...
- bzoj 1058: [ZJOI2007]报表统计
Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个 ...
- bzoj 1058: [ZJOI2007]报表统计 (Treap)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1058 题面; 1058: [ZJOI2007]报表统计 Time Limit: 15 Sec ...
- bzoj 1058 bst
因为是数列的维护,所以我们可以考虑用splay来维护,每次在x插入的时候就在x+1前面插入就行了,然后用bst来维护两问的答案,但是应该会tle.我们来考虑这个问题的性质,首先因为这个数列没有删除操作 ...
- AC日记——[ZJOI2007]报表统计 bzoj 1058
1058 思路: 平衡树的题: 然而我的平衡树写一次炸一次QwQ: 而且各种tle: 所以stl水过: 代码: #include <set> #include <cstdio> ...
- BZOJ 1058
服气!我果然就是个傻逼. 傻兮兮地感觉两个数之间的差距无需删除一些答案,妈个鸡就只加入了一些新的答案忘记了去掉无效的答案.我果然是傻逼,经验不足脑子笨... 这么水的题...不说了,说多了都是泪. 自 ...
- BZOJ 1058 报表统计 (STL)
题解:数据结构的基本操作,用STL可以完美实现,就是比较慢…… #include <cstdio> #include <map> #include <set> #i ...
随机推荐
- php fmod()函数 语法
php fmod()函数 语法 作用:fmod()函数的作用是两个数值做除法运算后的余数 语法:fmod(X,Y).大理石平台哪家好 参数: 参数 描述 X 必须,X为除数 Y 必须,被除数,如果Y为 ...
- 暑期训练 CF套题
CodeForces 327A 题意:有n个数,都是0或1,然后必须执行一次操作,翻转一个区间,里面的数0变1,1变0,求最多1的数量 思路:最开始我写的最大字段和,后面好像写搓了,然后我又改成暴力, ...
- php 封装原生数据导入的方法(csv文件格式)
//前端---部分代码 <form class="form-inline" style="margin-top: 20px" method="p ...
- Spring Boot学习一之Spring Beans和依赖注入
你可以自由地使用任何标准的Spring框架技术去定义beans和它们注入的依赖.简单起见,我们经常使用 @ComponentScan 注解搜索beans,并结合 @Autowired 构造器注入. 如 ...
- LINUX 文件合并,去重
(1)两个文件的交集,并集前提条件:每个文件中不得有重复行1. 取出两个文件的并集(重复的行只保留一份)cat file1 file2 | sort | uniq > file32. 取出两个文 ...
- 七. jenkins部署springboot项目(4)-linux环境--远程调试
前提:linux环境,jenkins服务器和springboot服务器不在一台机器. linux环境,jenkins这里就不说了,主要说下和windows环境的不同. 1. jenkins服务器连接s ...
- python可变参数类型 a,*args,**kwargs
a - int *args --tuple **kwargs -- dict *args是非关键字参数,用于元组,**kw是关键字参数,用于字典 可变参数 在Python函数中,还可以定义可变参数.顾 ...
- 安装第三方包&查看python版本/第三方包版本
安装第三方包时,经常需要查看python版本,以及是否安装第三方包及版本,每次都要百度下指令. 故小编整理了下安装/卸载第三方包,查看python/第三包的指令,具体如下: 一.python安装/卸载 ...
- DOM操作 、js获取id的内容 和修改原来的内容(innerHTML)
js获取id的内容(getElementById) 和修改原来的内容(innerHTML) 1.通过ID获取元素 学过HTML/CSS样式,都知道,网页由标签将信息组织起来,而标签的id属性值是唯一的 ...
- Unity中文本AssetBundle的解析
Unity在其安装目录下提供了许多实用的小工具,就存放在unity安装目录下的:Editor/Data/Tools, 其中该路径下的WebExtract.ext和binary2text.exe可以用 ...