沿用了学长的$multiset$

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

。。。

。。。

。。。

维护两个数组,$a[]$和$b[]$表示每一段开头的元素和结尾的元素。

在更新相邻差值的时候,只用考虑新插入的值和原结尾的差以及和下一段开头的差就好了。

维护两个$multiset<int>ele,del$ 表示全部元素和表示全部差值 。

插入新元素的时候,我们把他在$ele$中找到前驱后继分别作差,来更新排序最小差。

然后在del中删除现在本段结尾与下一段开头的差,插入新结尾与当前本段结尾的差和新值与下一段开头的差。

#include<cstdio>
#include<iostream>
#include<set>
#include<cmath>
#include<cstring>
#define R register int
using namespace std;
const int Inf=0x3f3f3f3f,N=;
inline int g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
}
int n,m,a[N],b[N],ans=Inf;
multiset<int> del,ele;
multiset<int>::iterator it;
signed main() {
n=g(),m=g(); ele.insert(Inf),ele.insert(-Inf);
for(R i=;i<=n;++i) {
a[i]=g(); it=ele.lower_bound(a[i]);
//ans=min(ans,min(*it-a[i],a[i]-*--it));
ans=min(ans,*it-a[i]); ans=min(ans,a[i]-*--it);
ele.insert(a[i]);
} memcpy(b,a,sizeof(int)*(n+)); for(R i=;i<=n;++i) del.insert(abs(a[i]-a[i-]));
for(R i=;i<=m;++i) { register char s[]; scanf("%s",s);
if(s[]=='R') {
R p=g(),vl=g();
del.erase(del.find(abs(b[p]-a[p+])));
del.insert(abs(vl-b[p])),del.insert(abs(vl-a[p+])); b[p]=vl;
it=ele.lower_bound(vl);
//ans=min(ans,min(vl-*it,vl-*--it));
ans=min(ans,*it-vl); ans=min(ans,vl-*--it);
ele.insert(vl);
} else if(s[]=='G') printf("%d\n",*del.begin());
else printf("%d\n",ans);
}
}

2019.07.11

Luogu P1110 [ZJOI2007]报表统计 multiset的更多相关文章

  1. 洛谷 P1110 [ZJOI2007]报表统计 解题报告

    P1110 [ZJOI2007]报表统计 题目描述 \(Q\)的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小\(Q\)希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细 ...

  2. P1110 [ZJOI2007]报表统计 (multiset)

    [题目链接] https://www.luogu.org/problemnew/show/P1110 有以下三种操作: INSERT i k:在原数列的第i个元素后面添加一个新元素k:如果原数列的第i ...

  3. 2018.11.09 洛谷P1110 [ZJOI2007]报表统计(multiset)

    传送门 sb题. 直接用两个multisetmultisetmultiset维护相邻两个数的差值和所有数的前驱后继. 插入一个数的时候更新一下就行了. 代码: #include<bits/std ...

  4. BZOJ 1058: [ZJOI2007]报表统计 multiset + 卡常

    Code: #include<bits/stdc++.h> #define maxn 600000 #define inf 1000000000 using namespace std; ...

  5. P1110 [ZJOI2007]报表统计

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

  6. 洛谷.1110.[ZJOI2007]报表统计(Multiset Heap)

    题目链接 主要思路 /* 对于询问1,用堆代替multiset/Splay 对于询问2,multiset 1.注意哨兵元素 2.注意multiset中删除时是删除某元素的一个位置,而不是这个元素!这个 ...

  7. 洛谷.1110.[ZJOI2007]报表统计(Multiset)

    题目链接 主要思路 /* 其实只需要multiset即可 对于询问1,删除.插入差值,输出最小元素 对于询问2,插入后用前驱后继更新 1.注意哨兵元素 2.注意multiset中删除时是删除某元素的一 ...

  8. bzoj1058: [ZJOI2007]报表统计

    set.操作:insert(u,v)在u后面插入v,若u后面已插入过,在插入过的后面插入.mingap求出序列两两之间差值的最小值.minsortgap求出排序后的序列两两之间的最小值.用multis ...

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

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

随机推荐

  1. 剑指offer29:最小的k个数

    1 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 2 思路和方法,C++核心代码 2.1 sort()函数,ve ...

  2. python+selenium+webdriver+BeautifulSoup实现自动登录

    from selenium import webdriverimport timefrom bs4 import BeautifulSoupfrom urllib import requestimpo ...

  3. 2.安装阿里yum源

    1.删除自带的yum源:#cd /etc/yum.repos.d/#rm -rf *   2.配置远程yum源:wget -O /etc/yum.repos.d/CentOS-Base.repo ht ...

  4. WPF入门(1)——DataContext

    在WPF中,应用程序有两层:UI层和Data层.这里新建一个项目说明哪些是UI层,哪些是数据层. UI层很明显,就是用户看到的界面.但是数据层并不是下图所示: 上图中是UI层view的后台代码.当然, ...

  5. Go语言GOPATH详解(Go语言工作目录)

    GOPATH 是 Go语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录. 工作目录是一个工程开发的相对参考目录,好比当你要在公司编写一套服务器代码,你的工位所包含的桌面.计算机及椅子就是你的 ...

  6. MySQL设置自增字段

    1.MySQL每张表只能有1个自增字段,这个自增字段即可作为主键,也可用作非主键使用,但是请注意将自增字段当做非主键使用时必须为其添加唯一索引,否则系统将会报错 )将自动增长字段设置为主键 CREAT ...

  7. virtual和override

    偶然间看到的题,借此记录. class Program { static void Main(string[] args) { D d = new D(); //第一个D是申明类,第二个D是实例类 A ...

  8. 深入JavaScript对象(Object)与类(class),详细了解类、原型

    JavaScript基于原型的对象机制 JavaScript原型上的哪些事 一.JavaScript基于原型的对象机制 JavaScript对象是基于原型的面向对象机制.在一定程度上js基于原型的对象 ...

  9. Linux环境下MySql安装和常见问题的解决

    MySql安装 首先当然是要连接上linux服务器咯,然后就是下面的命令甩过去,梭哈,一通运行就是啦   梭哈 下载: sudo wget http://dev.mysql.com/get/mysql ...

  10. rabbimq 生产消费者

    composer.json { "require": { "php-amqplib/php-amqplib": "^2.9" } } com ...