problem

洛谷链接

solution

纯纯不理解要搬用平衡树的那些做法,使我们可可爱爱的链表不香不好写吗??

众所周知,链表法是可以进行删除和增加的,只需要维护每个点的前驱和后继。

相邻两个的差绝对值的最小值,用 set\text{set}set 维护这个绝对值差即可,每次增点时把原来的先删掉再加上新的。

任选两个数的差的绝对值更简单,直接扔进一个 set\text{set}set 然后每次新加点的时候,就 lower_bound() 求前后继,全局取 min\text{min}min 即可。

由于值可能相同,所以我们用 multiset\text{multiset}multiset 就行了。

非常小清新啊!

code

#include <bits/stdc++.h>
using namespace std;
#define maxn 1000005
multiset < int > s1, s2;
int n, m, ans = 0x3f3f3f3f;
int a[maxn], g[maxn], lst[maxn], nxt[maxn];int main() {scanf( "%d %d", &n, &m );for( int i = 1;i <= n;i ++ ) {scanf( "%d", &a[i] );g[i] = i;if( i > 1 ) lst[i] = i - 1;if( i < n ) nxt[i] = i + 1;if( i > 1 ) s1.insert( fabs( a[i] - a[i - 1] ) );s2.insert( a[i] );auto it = s2.lower_bound( a[i] );auto l = it, r = it;if( it != s2.begin() ) ans = min( ans, a[i] - *(--l) );if( (++r) != s2.end() ) ans = min( ans, *r - a[i] );}int cnt = n;for( int i = 1;i <= m;i ++ ) {char op[10]; int x, k;scanf( "%s", op );if( op[0] == 'I' ) {scanf( "%d %d", &x, &k );a[++ cnt] = k;s1.erase( s1.find( fabs( a[g[x]] - a[nxt[g[x]]] ) ) );lst[nxt[g[x]]] = cnt;lst[cnt] = g[x];nxt[cnt] = nxt[g[x]];nxt[g[x]] = cnt;g[x] = cnt;s1.insert( fabs( k - a[lst[cnt]] ) );s1.insert( fabs( k - a[nxt[cnt]] ) );s2.insert( k );auto it = s2.lower_bound( k );auto l = it, r = it;if( it != s2.begin() ) ans = min( ans, k - *(--l) );if( (++r) != s2.end() ) ans = min( ans, *r - k );}else if( op[4] == 'G' ) printf( "%d\n", *s1.begin() );else printf( "%d\n", ans );}return 0;
}

[ZJOI2007]报表统计(链表法+set)相关推荐

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

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

  2. 【BZOJ1058】[ZJOI2007]报表统计 STL

    [BZOJ1058][ZJOI2007]报表统计 Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一.经 ...

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

    1058: [ZJOI2007]报表统计 Time Limit: 15 Sec  Memory Limit: 162 MB Submit: 3774  Solved: 1284 [Submit][St ...

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

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

  5. P1110 [ZJOI2007]报表统计

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

  6. BZOJ1058 [ZJOI2007]报表统计 set

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ1058.html 题目传送门 - BZOJ1058 题解 考虑用两个 multiset 分别维护两个答案 ...

  7. BZOJ1058 ZJOI2007 报表统计 线段树+平衡树

    题意:给定一个序列,维护:1.插入一个元素  2.求相邻两个元素中,差值绝对值的最小值  3.求序列排序后相邻两个元素中,差值绝对值的最小值 题解: MIN_GAP:如果我们把数看成一组一组,每次插入 ...

  8. bzoj1058: [ZJOI2007]报表统计

    哈哈set卡时过了. set求前驱的方法:*--b.lower_bound(x) (想想写了splay的肉老师就很愉悦啊) 弄两个set,一个记录的是位置的值,一个是差值,MIN_SORT_GAP就很 ...

  9. Luogu P1110 [ZJOI2007]报表统计 multiset

    沿用了学长的$multiset$ 然后这道题可以看到我的程序中有两行注释,它在我看来和他们下面的代码没区别,但是我们发现,C++会先调用后面的参数,所以$--it$会被先执行 ... ... ... ...

最新文章

  1. 4.0 C++远征:重载运算符
  2. 工作后,拉开你和同龄人差距的,不是出身,不是努力,而是……
  3. 从计算机移到u盘如何加快速度,我的电脑移动文件到U盘里时进度很慢很慢,怎么让它变快?...
  4. 快速入门cocos2d-x jsbinding
  5. python学习笔记(七)——类基础
  6. Http / Put 和 Post 区别
  7. 浙江省计算机二级excel函数,浙江省计算机二级excel练习5操作要求
  8. Python type函数和isinstance函数区别 - Python零基础入门教程
  9. 玩转Redis集群(下)
  10. Discretized Streams (DStreams)离散化流
  11. 一文搞懂C++强制类型转换
  12. C++之实现优先队列
  13. android 设置超时时间,为android requestSingleUpdate设置超时
  14. oracle in table类型,Oracle Built-in Data Types(Oracle内置数据类型)
  15. solidworks分析视频教程-结构应力仿真有限元虚拟样机及流场分析
  16. c++ time_t和tm
  17. H5前端开源框架收藏
  18. 三大变换与自控(五)三角函数的正交性证明
  19. 用 MeGUI 压制 BDrip
  20. 信号(signal,kill,raise)

热门文章

  1. 卸载wrapt_[python] 安装TensorFlow问题 解决Cannot uninstall 'wrapt'. It is a distutils installed project...
  2. 密封槽设计标准_哈尔滨轴承 | 超全面机械密封选型
  3. java字符串拼接例子_Java详解【String】+【StringBuilder vs StringBuffer】+【字符串拼接】...
  4. python如何使用geotools_基于GeoTools实现道路结点的提取
  5. android平板 useragent,移动端适配 user-Agent
  6. 计算机算法音乐专业,音乐信号分析算法的乐理简说(非音乐专业的乐理)
  7. tcp unity 图片_用 Unity 做个游戏(七) - TCP Socket 客户端
  8. [C++11]指针空值类型nullptr
  9. C++ class实现顺序队列(完整代码)
  10. AcWing 1015. 摘花生