[BZOJ1058]报表统计
Description
Input
Output
对于每一个“MIN_GAP”和“MIN_SORT_GAP”命令,输出一行答案即可。
Sample Input
5 3 1
INSERT 2 9
MIN_SORT_GAP
INSERT 2 6
MIN_GAP
MIN_SORT_GAP
Sample Output
2
1
HINT
N , M ≤500000 对于所有的数据,序列内的整数不超过5*10^8。
操作2是找前驱后继,操作3是单点修改区间取$min$,线段树维护一下即可
PS:洛谷能过BZOJ TLE?
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#define inf 1e9
#define ls node<<1
#define rs node<<1|1
#define M 1500010
using namespace std;
int n,m,sz,root,del=inf,ans1=inf,ans2=inf;
int a[M],f[M],val[M],cnt[M],last[M],ch[M][];
struct Tree
{
int val[M<<];
void update(int node) {val[node]=min(val[ls],val[rs]);}
void build(int node,int l,int r)
{
if(l==r) {val[node]=abs(a[l]-a[l-]);return;}
int mid=(l+r)/;
build(ls,l,mid),build(rs,mid+,r);
update(node);
}
void change(int node,int l,int r,int x,int v)
{
if(l==r) {val[node]=v;return;}
int mid=(l+r)/;
if(x<=mid) change(ls,l,mid,x,v);
else change(rs,mid+,r,x,v);
update(node);
}
}T;
int get(int x){return ch[f[x]][]==x;}
void rotate(int x)
{
int old=f[x],oldf=f[old],k=get(x);
ch[old][k]=ch[x][k^]; f[ch[old][k]]=old;
ch[x][k^]=old; f[old]=x; f[x]=oldf;
if(oldf) ch[oldf][ch[oldf][]==old]=x;
}
void splay(int x)
{
for(int fa;(fa=f[x])!=;rotate(x))
if(f[fa]!=)
rotate(get(x)==get(fa)?fa:x);
root=x;
}
void insert(int x)
{
int now=root,last=;
while(now&&val[now]!=x)
last=now,now=ch[now][val[now]<x];
if(now) cnt[now]++;
else
{
now=++sz;
if(last) ch[last][val[last]<x]=now;
val[now]=x; f[now]=last; cnt[now]++;
}
splay(now);
}
void find(int x)
{
int now=root;
while(x!=val[now]&&ch[now][x>val[now]])
now=ch[now][x>val[now]];
splay(now);
}
int Next(int x,int f)
{
find(x);
int now=root;
if(cnt[now]) return now;
if(val[now]<x&&!f) return now;
if(val[now]>x&&f) return now;
now=ch[now][f];
while(ch[now][f^]) now=ch[now][f^];
return now;
}
void getnew(int i,int x)
{
T.change(,,n,i+,abs(a[i+]-x));
del=min(del,abs(last[i]-x));
ans2=min(ans2,abs(x-val[Next(x,)]));
ans2=min(ans2,abs(x-val[Next(x,)]));
insert(x);last[i]=x;
}
int main()
{
memset(last,,sizeof(last));
memset(a,,sizeof(a));
insert(-inf),insert(inf);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
T.build(,,n);
for(int i=;i<=n;i++) getnew(i,a[i]);
for(int i=;i<=m;i++)
{
char s[];scanf("%s",s);
if(s[]=='I')
{
int x,y;scanf("%d%d",&x,&y);
getnew(x,y);
}
else if(s[]=='G') printf("%d\n",min(del,T.val[]));
else printf("%d\n",ans2);
}
return ;
}
[BZOJ1058]报表统计的更多相关文章
- 【BZOJ1058】【ZJOI2007】报表统计(链表,堆,Splay)
[BZOJ1058][ZJOI2007]报表统计 题面 题目描述 Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细观 ...
- 【BZOJ1058】[ZJOI2007]报表统计 STL
[BZOJ1058][ZJOI2007]报表统计 Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一.经 ...
- bzoj1058: [ZJOI2007]报表统计
set.操作:insert(u,v)在u后面插入v,若u后面已插入过,在插入过的后面插入.mingap求出序列两两之间差值的最小值.minsortgap求出排序后的序列两两之间的最小值.用multis ...
- BZOJ 1058: [ZJOI2007]报表统计( 链表 + set )
这种题用数据结构怎么写都能AC吧...按1~N弄个链表然后每次插入时就更新答案, 用set维护就可以了... --------------------------------------------- ...
- [补档][ZJOI2007] 报表统计
[ZJOI2007] 报表统计 题目 传送门 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细观察,小Q发现统计一 ...
- 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 ...
- 基于Fusioncharts的报表统计
先了解fusioncharts插件,fusioncharts是一款基于XML和flash的报表组件,支持Java.PHP.AngularJS等等开发语言,所以,开发出来,加入swf文件,就可以出现动态 ...
- 洛谷 P1110 [ZJOI2007]报表统计 解题报告
P1110 [ZJOI2007]报表统计 题目描述 \(Q\)的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小\(Q\)希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细 ...
随机推荐
- response.setContentType()的String参数及对应类型(转)
response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据. 例如web浏览器就是通过MI ...
- 第九课——MySQL优化之索引和执行计划
一.创建索引需要关注什么? 1.关注基数列唯一键的数量: 比如性别,该列只有男女之分,所以性别列基数是2: 2.关注选择性列唯一键与行数的比值,这个比值范围在0~1之前,值越小越好: 其实,选择性列唯 ...
- 第十课——cluster故障转移操作,codis部署
作业描述] 1.cluster的故障转移操作,截图展示 2.部署codis,并写代码访问codis ================================================== ...
- poj3233—Matrix Power Series
题目链接:http://poj.org/problem?id=3233 题目意思:给一个矩阵n*n的矩阵A和一个k,求一个式子 S = A + A2 + A3 + … + Ak. 这个需要用到等比数列 ...
- 字符串与图片的Base64编码转换操作
//图片 转为 base64编码的文本 private void button1_Click(object sender, EventArgs e) { OpenFileDialog dlg = ne ...
- 虚拟网卡 TUN/TAP 驱动程序设计原理
简介 虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装.本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在li ...
- Flask用Flask-SQLAlchemy连接MySQL
安装 pip3 install Flask-SQLAlchemy 测试环境目录结构 settings.py DIALECT = 'mysql' DRIVER = 'pymysql' USERNAME ...
- python学习笔记(二十五)重写父类方法
python继承中,如果子类在调用某个方法时,它首先是从派生类(也就是当前类)中去找对应的方法,如果当前类中找不到对应的方法,就会去基类(派生类)中去逐个查找. 若父类的方法不能满足子类的需要,那么子 ...
- python web中的文件上传与下载
django 框架下 实现服务端的文件上传与下载: import jsonimport osimport uuid def attachment_upload(request): "&quo ...
- docker+MySQL+读写分离
一.拉取mysql镜像文件docker pull mysql二.查看镜像docker images三.创建配置文件目录mkdir /data/docker/mysql/{master,slave} - ...