bzoj 1058: [ZJOI2007]报表统计

Description

  小Q的妈妈是一个出纳,经常需要做一些统计报表的工作。今天是妈妈的生日,小Q希望可以帮妈妈分担一些工
作,作为她的生日礼物之一。经过仔细观察,小Q发现统计一张报表实际上是维护一个可能为负数的整数数列,并
且进行一些查询操作。在最开始的时候,有一个长度为N的整数序列,并且有以下三种操作: INSERT i k 在原数
列的第i个元素后面添加一个新元素k; 如果原数列的第i个元素已经添加了若干元素,则添加在这些元素的最后(
见下面的例子) MIN_GAP 查询相邻两个元素的之间差值(绝对值)的最小值 MIN_SORT_GAP 查询所有元素中最接
近的两个元素的差值(绝对值) 例如一开始的序列为 5 3 1 执行操作INSERT 2 9将得到: 5 3 9 1 此时MIN_GAP
为2,MIN_SORT_GAP为2。 再执行操作INSERT 2 6将得到: 5 3 9 6 1 注意这个时候原序列的第2个元素后面已经
添加了一个9,此时添加的6应加在9的后面。这个时候MIN_GAP为2,MIN_SORT_GAP为1。于是小Q写了一个程序,使
得程序可以自动完成这些操作,但是他发现对于一些大的报表他的程序运行得很慢,你能帮助他改进程序么?

solution

正解:堆+平衡树
又堕落了QwQ,说好的平衡树呢?
对于第一个操作,我们链表维护一下即可
对于第二个询问,我们维护一个堆,我们每加入一个元素就把与前后差值加入堆中,堆中记录后继,便于删除.
对于第三个询问,答案单调不升,直接平衡树维护全局变量,插入时取min即可

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <queue>
#include <cmath>
#include <set>
#define RG register
#define il inline
#define iter iterator
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
using namespace std;
typedef long long ll;
const int N=1000005,inf=2e9;
int n,m,nxt[N],cnt=0,pre[N],val[N],last[N],b[N];
char S[41];
struct node{int x,y,val;bool operator <(const node &pr)const{return val>pr.val;}
};
priority_queue<node>q;
multiset<int>G;
multiset<int>::iter it;
void work()
{int x,y,z,ans=inf;node k;scanf("%d%d",&n,&m);cnt=n;for(int i=1;i<=n;i++){scanf("%d",&val[i]);b[i]=val[i];last[i]=i;pre[i]=i-1;nxt[i]=i+1;if(i!=1)q.push((node){i-1,i,abs(val[i]-val[i-1])});G.insert(val[i]);}sort(b+1,b+n+1);for(int i=2;i<=n;i++)ans=min(ans,b[i]-b[i-1]);G.insert(-inf);G.insert(inf);while(m--){scanf("%s",S);if(S[0]=='I'){scanf("%d%d",&x,&z);y=last[x];cnt++;val[cnt]=z;if(x<n)pre[x+1]=cnt,nxt[cnt]=x+1;last[x]=cnt;nxt[y]=cnt;pre[cnt]=y;q.push((node){y,cnt,abs(val[y]-z)});if(x<n)q.push((node){cnt,x+1,abs(val[x+1]-z)});it=G.lower_bound(z);if(*it!=-inf){ans=min(ans,abs(*it-z));--it;if(*it!=-inf)ans=min(ans,abs(*it-z));}it=G.upper_bound(z);if(*it!=inf)ans=min(ans,abs(*it-z));G.insert(z);}else if(S[4]=='G'){while(!q.empty()){k=q.top();if(nxt[k.x]!=k.y)q.pop();else {printf("%d\n",k.val);break;}}}else printf("%d\n",ans);}
}int main()
{freopen("pp.in","r",stdin);freopen("pp.out","w",stdout);work();return 0;
}

转载于:https://www.cnblogs.com/Yuzao/p/8040437.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拼音输入法功能大比拼

使用电脑工作或在互联网大潮中冲浪的朋友都离不开输入法的使用&#xff0c;输入法种类繁多&#xff0c;让新接触电脑的朋友目不暇接&#xff0c;难以确定哪一款才是最适合的自己的输入法。 一、拼音走向主流 五笔逐渐衰落尽管目前市场上的输入法种类繁多&#xff0c;各种各样的…

循序渐进PYTHON3(十三) --8-- DJANGO之ADMIN

admin简单使用&#xff1a; 1.urls.py2.settings.py3.models.pyfrom django.db import modelsclassUserInfo(models.Model): uid models.AutoField(primary_keyTrue) user_name models.CharField(max_length30) email models.EmailField() memo models.TextField() img mo…

你见过出道即巅峰吗?

我不知道你们见过没有&#xff0c;反正我见过了。这个消息是我周五上班的时候收到的&#xff0c;这个是一位非电子专业转行嵌入式的同学&#xff0c;之前加我微信后&#xff0c;聊的不是很多&#xff0c;但是非常惊讶的是&#xff0c;刚刚毕业就拿到了一份非常不错的offer。但是…

Turing equation

问题 F: F.Turing equation 时间限制: 1 Sec 内存限制: 128 MB 提交: 19 解决: 1 [提交][状态][讨论版] 题目描述 The fight goes on,whether to store numbers starting with their most significant digit ortheir least significant digit. Sometimes this is alsocall…

vmware linux

从今天才开始linux的系统学习。在虚拟机里的linux-as-3不能上网&#xff0c; 记得好久以前就有这种问题。一直以为是在配置vmware时选的桥接方式有误。但是改后&#xff0c;也不能上网。怀疑根本就不能和路由器连通。首先确定物理连接&#xff0c;当在命令行下设好ip与netmask…

代码优化导致的奇葩问题

这个是今天在微信群里讨论的一个问题&#xff0c;先看图片点击查看大图代码流程大概是这个样子的点击查看大图查看 length 和 space1 的值&#xff0c;明显看到 length 小于 space1 的值&#xff0c;即使是这样小白都能搞懂流程的情况下&#xff0c;代码还是跑到else里面区执行…

实践:创建异步 HTTP 处理器

异步 HTTP 处理器允许你启动外部进程&#xff08;比如一个调用远程服务器的方法&#xff09;&#xff0c;并且在无需等待外部进程被完成的情况之下继续处理器自身的处理。另外&#xff0c;在处理一个异步 HTTP 处理器的期间&#xff0c;ASP.NET 还会把通常用于外部进程的线程返…

nyoj187 快速查找素数

快速查找素数 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;3描述现在给你一个正整数N&#xff0c;要你快速的找出在2.....N这些数里面所有的素数。 输入给出一个正整数数N(N<2000000)但N为0时结束程序。测试数据不超过100组输出将2~N范围…

深度:关于Linux内核最硬核的文章

来源 &#xff1a;头条号Linux学习教程&#xff0c;冰凌块儿01前言本文主要讲解什么是Linux内核&#xff0c;以及通过多张图片展示Linux内核的作用与功能&#xff0c;以便于读者能快速理解什么是Linux内核&#xff0c;能看懂Linux内核。拥有超过1300万行的代码&#xff0c;Linu…

springaop----springaop的使用(一)

与大多数技术一样&#xff0c; AOP 已经形成了自己的术语。描述切面的常用术语有通知&#xff08;advice&#xff09;、切点&#xff08;pointcut&#xff09;和连接点&#xff08;join point&#xff09;。从今天开始&#xff0c;我们对spring的切面编程做一个总结。她们都是你…

Microsoft .NET Pet Shop 4 架构与技术分析

1&#xff0e;项目概述与架构分析微软刚推出了基于ASP.NET 2.0下的Pet Shop 4, 该版本有了一个全新的用户界面。是研究ASP.NET 2.0的好范例啊&#xff0c;大家都知道&#xff0c;一直以来&#xff0c;在.NET和Java之间争论不休&#xff0c;到底使用哪个平台开发的企业级应用性能…

nyoj 14 会场安排问题

会场安排问题 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述学校的小礼堂每天都会有许多活动&#xff0c;有时间这些活动的计划时间会发生冲突&#xff0c;需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动&#xff0c;…

想领取开发套件,就来参加AIoT开发者大赛

你心目中的智慧校园长什么样&#xff1f; 传统校园上自习得排队等位&#xff0c;智慧校园手机一键查询空位&#xff0c;抢座占位有序便利&#xff1b; 传统校园灯光全靠手动调整&#xff0c;智慧校园灯光无感调控&#xff0c;营造全新智能光照环境&#xff1b;传统校园安全防护…

Notadd 2.0 全新 Node.js 版本~ (开发中) [从 PHP 到 node 的踩坑记]

对于 Notadd 我们本来期望它实现更多... 尽管我们也尝试做了很多努力&#xff0c;但是由于 PHP 本身的局限&#xff0c;以及考虑到开发环境配置的复杂程度&#xff0c;最终使用了折中方案。接下来&#xff0c;我们谈谈整个技术选型历程&#xff0c;也供今后相关开发者做借鉴和参…

SQL Server 数据库构架

Microsoft SQL Server™ 2000 数据存储在数据库中。在数据库中&#xff0c;数据被组织到用户可以看见的逻辑组件中。数据库还可以按物理方式&#xff0c;在磁盘上作为两个或更多的文件实现。使用数据库时使用的主要是逻辑组件&#xff0c;例如表、视图、过程和用户。文件的物理…

[教程]win10 ,ubuntu双系统安装避坑指南

这篇博客可以解决1.如何安装win10,ubuntu双系统2.如何使用win10引导Ubuntu&#xff0c;并且设置win10引导界面点击阅读原文获取更多信息。win10,ubuntu双系统的安装为什么要装双系统&#xff0c;之前用的虚拟机&#xff0c;但是虚拟机没有显卡&#xff0c;使用gazebo之类的3D仿…

nyoj 586 疯牛(二分+贪心)

疯牛 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述农夫 John 建造了一座很长的畜栏&#xff0c;它包括N (2 < N < 100,000)个隔间&#xff0c;这些小隔间依次编号为x1,...,xN (0 < xi < 1,000,000,000).但是&#xff0c;Jo…

es6--解构赋值

1&#xff1a; 基本用法 let [a,b,c] [1,2,3] 总结&#xff1a;只要等号两边都是可循环的结构&#xff0c;等号右边的就会按照相应的位置把值赋给左边 2&#xff1a;高级用法 let [x,y 1] [1,2] 1) 变量可以有默认值 let [x,y 1] [1,2] 2&#xff09;当且仅当等号右边的…

Type-C PD充电简介

一、Type-C简介自1998年以来&#xff0c;USB发布至今&#xff0c;USB已经走过20个年头有余了。在这20年间&#xff0c;USB-IF组织发布N种接口状态&#xff0c;包括A口、B口、MINI-A、MINI-B、Micro-A、Micro-B等等接口形态&#xff0c;由于各家产品不同&#xff0c;不同产品使用…

Linux字符设备驱动内幕

哈喽&#xff0c;我是老吴&#xff0c;继续记录我的学习心得。一、保持专注的几个技巧将最重要的事放在早上做。待在无干扰环境下&#xff0c;比如图书馆。意识到刚坐下开始投入工作前&#xff0c;有点负面小情绪是特别正常的现象。让“开心一刻”成为计划的一部分。拥有合情合…