[补档][ZJOI2007] 报表统计
[ZJOI2007] 报表统计
题目
小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写了一个程序,使得程序可以自动完成这些操作,但是他发现对于一些大的报表他的程序运行得很慢,你能帮助他改进程序么?INPUT
输入文件form.in第一行包含两个整数N,M,分别表示原数列的长度以及操作的次数。第二行为N个整数,为初始序列。接下来的M行每行一个操作,即“INSERT i k”,“MIN_GAP”,“MIN_SORT_GAP”中的一种(无多余空格或者空行)。OUTPUT
对于每一个“MIN_GAP”和“MIN_SORT_GAP”命令,输出一行答案即可。SAMPLE
INPUT
3 55 3 1INSERT 2 9MIN_SORT_GAPINSERT 2 6MIN_GAPMIN_SORT_GAPOUTPUT
221数据规模
对于30%的数据,N≤ 1000 , M ≤ 5000对于100%的数据,N , M ≤500000对于所有的数据,序列内的整数不超过5×10^8。
解题报告
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<set>
using namespace std;
inline int read(){
int sum(),f();
char ch(getchar());
for(;ch<''||ch>'';ch=getchar())
if(ch=='-')
f=-;
for(;ch>=''&&ch<='';sum=sum*+(ch^),ch=getchar());
return sum*f;
}
priority_queue<int,vector<int>,greater<int> >dust;
priority_queue<int,vector<int>,greater<int> >ans1;
vector<int>v[];
multiset<int>st;
multiset<int>::iterator it;
int n,m;
int w[];
int ans2(0x7fffffff);
char op[];
inline int my_max(int a,int b){
return a>b?a:b;
}
inline int my_min(int a,int b){
return a<b?a:b;
}
inline int jdz(int x){
return x>=?x:-x;
}
inline void insert(int x,int y){
int size(v[x].size());
if(x<n)
dust.push(jdz(v[x][size-]-v[x+][]));
ans1.push(jdz(y-v[x][size-]));
if(x<n)
ans1.push(jdz(y-v[x+][]));
v[x].push_back(y);
st.insert(y);
it=st.find(y);
if(it!=st.begin()){
it--;
int tmp(*it);
ans2=my_min(jdz(y-tmp),ans2);
it++;
}
if(it!=st.end()){
it++;
int tmp(*it);
ans2=my_min(jdz(y-tmp),ans2);
}
}
inline int query(){
while(){
if(dust.empty()||dust.top()!=ans1.top())
break;
dust.pop();
ans1.pop();
}
return ans1.top();
}
int main(){
freopen("form.in","r",stdin);
freopen("form.out","w",stdout);
n=read(),m=read();
for(int i=;i<=n;i++){
w[i]=read();
st.insert(w[i]);
it=st.find(w[i]);
if(it!=st.begin()){
it--;
int tmp(*it);
ans2=my_min(ans2,jdz(tmp-w[i]));
it++;
}
if(it!=st.end()){
it++;
int tmp(*it);//cout<<tmp<<endl;
ans2=my_min(ans2,jdz(tmp-w[i]));
}
if(i^)
ans1.push(jdz(w[i]-w[i-]));
v[i].push_back(w[i]);
// cout<<i<<' '<<w[i]<<' '<<ans2<<endl;
}
while(m--){
scanf("%s",op);
if(op[]=='I'){
int x(read()),y(read());
insert(x,y);
}
else{
if(strlen(op)<)
printf("%d\n",query());
else
printf("%d\n",ans2);
}
}
}
[补档][ZJOI2007] 报表统计的更多相关文章
- bzoj1058: [ZJOI2007]报表统计
set.操作:insert(u,v)在u后面插入v,若u后面已插入过,在插入过的后面插入.mingap求出序列两两之间差值的最小值.minsortgap求出排序后的序列两两之间的最小值.用multis ...
- BZOJ 1058: [ZJOI2007]报表统计( 链表 + set )
这种题用数据结构怎么写都能AC吧...按1~N弄个链表然后每次插入时就更新答案, 用set维护就可以了... --------------------------------------------- ...
- BZOJ_1058_[ZJOI2007]报表统计_STL
BZOJ_1058_[ZJOI2007]报表统计_STL Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼 ...
- bzoj 1058: [ZJOI2007]报表统计 (Treap)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1058 题面; 1058: [ZJOI2007]报表统计 Time Limit: 15 Sec ...
- 洛谷 P1110 [ZJOI2007]报表统计 解题报告
P1110 [ZJOI2007]报表统计 题目描述 \(Q\)的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小\(Q\)希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细 ...
- bzoj P1058 [ZJOI2007]报表统计——solution
1058: [ZJOI2007]报表统计 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 4099 Solved: 1390 [Submit][St ...
- 【BZOJ1058】[ZJOI2007]报表统计 STL
[BZOJ1058][ZJOI2007]报表统计 Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一.经 ...
- [ZJOI2007]报表统计(splay,堆)
[ZJOI2007]报表统计(luogu) Description 题目描述 Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一. ...
- 1058: [ZJOI2007]报表统计 - BZOJ
Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个非 ...
随机推荐
- GA代码中的细节
GA-BLX交叉-Gaussion变异 中的代码细节: 我写了一个GA的代码,在2005测试函数上一直不能得到与实验室其他同学类似的数量级的结果.现在参考其他同学的代码,发现至少有如下问题: 1.在交 ...
- wildfly10报错2:ID注释有错
13:55:56,612 INFO [org.jboss.modules] (main) JBoss Modules version 1.5.1.Final 13:55:56,891 INFO [or ...
- 如何成为一名JAVAEE软件工程师?(前言)
笔者将会整理出一整套成为一个JAVAEE工程师的学习路线和资料.欢迎同行和网友们订阅或指正.不定期更新. 笔者在软件工作做了7年java开发,开发过ERP,CRM等应用系统并担任过项目 ...
- JS面向对象笔记二
菜单导航,<JS面向对象笔记一>, 参考书籍:阮一峰之<JavaScript标准参考教程> 一.构造函数和new命令 二.this关键字 三.构造函数和new命令 四.构造函 ...
- php二进制流文件
<?php $img_file = 'test.png'; // $fp = fopen($img_file, 'rb'); // $content = fread($fp, filesize( ...
- [leetcode-442-Find All Duplicates in an Array]
Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others ...
- 【LeetCode】144. Binary Tree Preorder Traversal
题目: Given a binary tree, return the preorder traversal of its nodes' values. For example:Given binar ...
- Failed to sync Gradle project 'XX'错误解决
错误代码 Failed to sync Gradle project 'WeChat' Error:Failed to find target with hash string 'android-24 ...
- 基于Dapper的分页实现,支持筛选,排序,结果集总数,非存储过程
简介 之前事先搜索了下博客园上关于Dapper分页的实现,有是有,但要么是基于存储过程,要么支持分页,而不支持排序,或者搜索条件不是那么容易维护. 代码 首先先上代码: https://github. ...
- mybatis和spring整合
参考文档: http://www.cnblogs.com/jyh317/p/3834142.html http://www.cnblogs.com/xdp-gacl/p/4271627.html ht ...