项目编号: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的更多相关文章

  1. [BZOJ 1058] [ZJOI2007] 报表统计 【平衡树】

    题目链接:BZOJ - 1058 题目分析 这道题看似是需要在序列中插入一些数字,但其实询问的内容只与相邻的元素有关. 那么我们只要对每个位置维护两个数 Ai, Bi, Ai 就是初始序列中 i 这个 ...

  2. [BZOJ 1058] 报表统计

    Link: BZOJ 1058 传送门 Solution: 为了这道题今天下午一直都在和常数大战…… 1.对于询问1,我们记录每个数末位置的数$T[i]$和初始位置$S[i]$ 用平衡树维护所有差值, ...

  3. bzoj 1058 [ZJOI2007]报表统计(set)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1058 [题意] 一个序列,提供插入,查询相邻最小差值,查询任意最小差值的操作. [思路 ...

  4. BZOJ 1058: [ZJOI2007]报表统计( 链表 + set )

    这种题用数据结构怎么写都能AC吧...按1~N弄个链表然后每次插入时就更新答案, 用set维护就可以了... --------------------------------------------- ...

  5. bzoj 1058: [ZJOI2007]报表统计

    Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个 ...

  6. bzoj 1058: [ZJOI2007]报表统计 (Treap)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1058 题面; 1058: [ZJOI2007]报表统计 Time Limit: 15 Sec ...

  7. bzoj 1058 bst

    因为是数列的维护,所以我们可以考虑用splay来维护,每次在x插入的时候就在x+1前面插入就行了,然后用bst来维护两问的答案,但是应该会tle.我们来考虑这个问题的性质,首先因为这个数列没有删除操作 ...

  8. AC日记——[ZJOI2007]报表统计 bzoj 1058

    1058 思路: 平衡树的题: 然而我的平衡树写一次炸一次QwQ: 而且各种tle: 所以stl水过: 代码: #include <set> #include <cstdio> ...

  9. BZOJ 1058

    服气!我果然就是个傻逼. 傻兮兮地感觉两个数之间的差距无需删除一些答案,妈个鸡就只加入了一些新的答案忘记了去掉无效的答案.我果然是傻逼,经验不足脑子笨... 这么水的题...不说了,说多了都是泪. 自 ...

  10. BZOJ 1058 报表统计 (STL)

    题解:数据结构的基本操作,用STL可以完美实现,就是比较慢…… #include <cstdio> #include <map> #include <set> #i ...

随机推荐

  1. LDD3 第11章 内核的数据类型

    考虑到可移植性的问题,现代版本的Linux内核的可移植性是非常好的. 在把x86上的代码移植到新的体系架构上时,内核开发人员遇到的若干问题都和不正确的数据类型有关.坚持使用严格的数据类型,并且使用-W ...

  2. flutte页面布局四

    AspectRatio 组件 AspectRatio 的作用是根据设置调整子元素 child 的宽高比. AspectRatio 首先会在布局限制条件允许的范围内尽可能的扩展,widget 的高度是由 ...

  3. C#将Json字符串转化为对象

    实体类: public class CheckData { public string msg; public string code; public string data; public stri ...

  4. EF框架实增删改查

    数据库链接配置: <connectionStrings> <add name="XxzxWorkEntities" connectionString=" ...

  5. redis.conf 配置文件介绍

    1: Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2: 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/ru ...

  6. PHP将mysql数据表转换为excel文件

    测试代码: <?php $DB_Server = "127.0.0.1"; $DB_Username = "root"; $DB_Password = & ...

  7. swoole webSocket 聊天室示例

    swoole1.7.9增加了内置的WebSocket服务器支持,通过几行PHP代码就可以写出一个异步非阻塞多进程的WebSocket服务器. 基于swoole websocket的用户上下线通知,在线 ...

  8. hdu3518 Boring counting(后缀数组)

    Boring counting 题目传送门 解题思路 后缀数组.枚举每种长度,对于每个字符串,记录其最大起始位置和最小起始位置,比较是否重合. 代码如下 #include <bits/stdc+ ...

  9. Oralce分页

    SELECT *FROM ( SELECT TMP_PAGE.*, ROWNUM ROW_ID FROM ( SELECT A . ID AS "id", A .bill_noti ...

  10. Vue中src属性绑定的问题

    地址:https://blog.csdn.net/qq_25479327/article/details/80082520 地址:https://blog.csdn.net/sinat_3655513 ...