沿用了学长的$multiset$ 然后这道题可以看到我的程序中有两行注释,它在我看来和他们下面的代码没区别,但是我们发现,C++会先调用后面的参数,所以$--it$会被先执行 ... ... ... 维护两个数组,$a[]$和$b[]$表示每一段开头的元素和结尾的元素. 在更新相邻差值的时候,只用考虑新插入的值和原结尾的差以及和下一段开头的差就好了. 维护两个$multiset<int>ele,del$ 表示全部元素和表示全部差值 . 插入新元素的时候,我们把他在$ele$中找到前驱后继分别作…
P1110 [ZJOI2007]报表统计 题目描述 \(Q\)的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小\(Q\)希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细观察,小\(Q\)发现统计一张报表实际上是维护一个非负整数数列,并且进行一些查询操作. 在最开始的时候,有一个长度为N的整数序列,并且有以下三种操作: \(INSERT\) \(i\) \(k\):在原数列的第i个元素后面添加一个新元素\(k\):如果原数列的第\(i\)个元素已经添加了若干元素,则…
题目描述 Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细观察,小Q发现统计一张报表实际上是维护一个非负整数数列,并且进行一些查询操作. 在最开始的时候,有一个长度为N的整数序列,并且有以下三种操作: INSERT i k:在原数列的第i个元素后面添加一个新元素k:如果原数列的第i个元素已经添加了若干元素,则添加在这些元素的最后(见下面的例子) MIN_GAP:查询相邻两个元素的之间差值(绝对值)的最小值 MIN…
[题目链接] https://www.luogu.org/problemnew/show/P1110 有以下三种操作: INSERT i k:在原数列的第i个元素后面添加一个新元素k:如果原数列的第i个元素已经添加了若干元素,则添加在这些元素的最后 MIN_GAP:查询相邻两个元素的之间差值(绝对值)的最小值 MIN_SORT_GAP:查询所有元素中最接近的两个元素的差值(绝对值) 用两个multiset full,delta;记录很多个块. 维护相邻数的差时直接更新,维护全集的差时找到前驱和后…
传送门 sb题. 直接用两个multisetmultisetmultiset维护相邻两个数的差值和所有数的前驱后继. 插入一个数的时候更新一下就行了. 代码: #include<bits/stdc++.h> using namespace std; inline int read(){ int ans=0,w=1; char ch=getchar(); while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();} while(isdigit(ch))an…
1058: [ZJOI2007]报表统计 Time Limit: 15 Sec  Memory Limit: 162 MB Submit: 4099  Solved: 1390 [Submit][Status][Discuss] Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个可能为负数的整数数列,并 且进行一些查询操作.在最开始的时候,有一个长…
[BZOJ1058][ZJOI2007]报表统计 Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个可能为负数的整数数列,并且进行一些查询操作.在最开始的时候,有一个长度为N的整数序列,并且有以下三种操作: INSERT i k 在原数列的第i个元素后面添加一个新元素k: 如果原数列的第i个元素已经添加了若干元素,则添加在这些元素的最后(见下面的例子…
[ZJOI2007]报表统计(luogu) Description 题目描述 Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细观察,小Q发现统计一张报表实际上是维护一个非负整数数列,并且进行一些查询操作. 在最开始的时候,有一个长度为N的整数序列,并且有以下三种操作: INSERT i k:在原数列的第i个元素后面添加一个新元素kk:如果原数列的第ii个元素已经添加了若干元素,则添加在这些元素的最后(见下面的例子…
set.操作:insert(u,v)在u后面插入v,若u后面已插入过,在插入过的后面插入.mingap求出序列两两之间差值的最小值.minsortgap求出排序后的序列两两之间的最小值.用multiset维护就可以了.忽略了新插入的数对于mingap的影响WA了一次. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<set> #i…
这种题用数据结构怎么写都能AC吧...按1~N弄个链表然后每次插入时就更新答案, 用set维护就可以了... ----------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<set> #…
[ZJOI2007] 报表统计 题目 传送门 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细观察,小Q发现统计一张报表实际上是维护一个非负整数数列,并且进行一些查询操作. 在最开始的时候,有一个长度为N的整数序列,并且有以下三种操作: INSERT i k 在原数列的第i个元素后面添加一个新元素k:如果原数列的第i个元素已经添加了若干元素,则添加在这些元素的最后(见下面的例子) MIN_GAP 查询相邻两个元…
BZOJ_1058_[ZJOI2007]报表统计_STL Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个可能为负数的整数数列,并 且进行一些查询操作.在最开始的时候,有一个长度为N的整数序列,并且有以下三种操作: INSERT i k 在原数 列的第i个元素后面添加一个新元素k: 如果原数列的第i个元素已经添加了若干元素,则添加在这些元素的最后…
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1058 题面; 1058: [ZJOI2007]报表统计 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 4740  Solved: 1568[Submit][Status][Discuss] Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经…
感谢 @cmy962085349 提供的hack数据,已经改对了. 先声明,我好像是题解里写双$fhq$ $treap$里唯一能过的...(最后两个点啊) 思路:首先看题目,$MIN_GAP_SORT$ 明显是求它的前驱与后继(可能有相同的),所以就用平衡树,但是又要求两个相邻的数的差,就可以有再开一个平衡树存放差值 实现:抛开奇奇怪怪的的题面,主要考虑这三个操作: 1.$INSERT$ $i$ $k$: 这个很简单,用链表就行了(数组模拟的),但是要注意,插入的时候,要接着上一个在这插入的,还…
https://www.lydsy.com/JudgeOnline/problem.php?id=1058 https://www.luogu.org/problemnew/show/P1110#sub 实现三种操作: INSERT i k:在原数列的第i个元素后面添加一个新元素k:如果原数列的第i个元素已经添加了若干元素,则添加在这些元素的最后(见下面的例子) MIN_GAP:查询相邻两个元素的之间差值(绝对值)的最小值 MIN_SORT_GAP:查询所有元素中最接近的两个元素的差值(绝对值)…
洛谷传送门 主要思路大概也是差不多的,对于两种询问分别用线段树与平衡树来维护. 1.MIN_SORT_GAP:显然平衡树简单操作,来一发前驱.后继即可. 2.MIN_GAP:这一个我用的是线段树:可以注意到插入元素的操作,如果是在一个元素之后反复插入,这些元素之间更新出来的最小值是不会发生改变的.只有元素与元素之间会有不断的插入而导致最小值变大.所以用线段树单点修改+维护区间min值,相邻插入值(中间不会再出现新的数字)之间可以直接暴力维护. 代码如下: #include <bits/stdc+…
小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个可能为负数的整数数列,并且进行一些查询操作.在最开始的时候,有一个长度为N的整数序列,并且有以下三种操作: INSERT i k 在原数列的第i个元素后面添加一个新元素k: 如果原数列的第i个元素已经添加了若干元素,则添加在这些元素的最后(见下面的例子) MIN_GAP 查询相邻两个元素的之间差值(绝对值)的最小值 MIN_…
Code: #include<bits/stdc++.h> #define maxn 600000 #define inf 1000000000 using namespace std; void setIO(string s) { string in=s+".in", out=s+".out"; freopen(in.c_str(),"r",stdin); // freopen(out.c_str(),"w",s…
Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个非负整数数列,并且进行一些查询操作.在最开始的时候,有一个长度为N的整数序列,并且有以下三种操作: INSERT i k 在原数列的第i个元素后面添加一个新元素k: 如果原数列的第i个元素已经添加了若干元素,则添加在这些元素的最后(见下面的例子) MIN_GAP 查询相邻两个元素的之间差值(绝对值)的…
题目描述 Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细观察,小Q发现统计一张报表实际上是维护一个非负整数数列,并且进行一些查询操作. 在最开始的时候,有一个长度为N的整数序列,并且有以下三种操作: INSERT i k:在原数列的第i个元素后面添加一个新元素k:如果原数列的第i个元素已经添加了若干元素,则添加在这些元素的最后(见下面的例子) MIN_GAP:查询相邻两个元素的之间差值(绝对值)的最小值 MIN…
Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个可能为负数的整数数列,并 且进行一些查询操作.在最开始的时候,有一个长度为N的整数序列,并且有以下三种操作: INSERT i k 在原数 列的第i个元素后面添加一个新元素k: 如果原数列的第i个元素已经添加了若干元素,则添加在这些元素的最后( 见下面的例子) MIN_GAP 查询相邻两个元素的之间…
Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 4190  Solved: 1420[Submit][Status][Discuss] Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个可能为负数的整数数列,并 且进行一些查询操作.在最开始的时候,有一个长度为N的整数序列,并且有以下三种操作: INS…
Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个可能为负数的整数数列,并 且进行一些查询操作.在最开始的时候,有一个长度为N的整数序列,并且有以下三种操作: INSERT i k 在原数 列的第i个元素后面添加一个新元素k: 如果原数列的第i个元素已经添加了若干元素,则添加在这些元素的最后( 见下面的例子) MIN_GAP 查询相邻两个元素的之间…
http://www.lydsy.com/JudgeOnline/problem.php?id=1058 当复习一下splay.... 做法很简单..... 观察得知每一次插入一个点只需要维护前后的绝对值 观察得知min_sort_gap直接二分已经排好序的数组找到前驱后继更新即可(这里是个贪心,显然成立) 观察得知这是区间操作,所以我用了splayQAQ 注意些细节即可. 好慢啊,,10000ms... #include <cstdio> #include <cstring> #…
Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个可能为负数的整数数列,并 且进行一些查询操作.在最开始的时候,有一个长度为N的整数序列,并且有以下三种操作: INSERT i k 在原数 列的第i个元素后面添加一个新元素k: 如果原数列的第i个元素已经添加了若干元素,则添加在这些元素的最后( 见下面的例子) MIN_GAP 查询相邻两个元素的之间…
传送门 [洛谷传送门] [bzoj传送门] 前言 洛谷和网上的题解都好复杂哦,或者是stl水过. 窝的语文不怎么好,所以会有一些表达上的累赘或者是含糊不清,望各大佬海涵. 前置芝士 首先你一定要会平衡树(BST). 什么平衡树都可以,只要是能过掉[模板]普通平衡树的都可以. 关于平衡树的详细操作这里就不一一赘述了. 正解 这一道题目看到的时候不能盲目思考能不能用一个数据结构一下子维护所有的正确答案,对于这一道题目是很难实现的.反正蒟蒻是实现不了 我们将这个问题一层一层的剖析一下. 第一个操作 插…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1058 [题意] 一个序列,提供插入,查询相邻最小差值,查询任意最小差值的操作. [思路] Set 用两个set,listed装所有的相邻差值,sorted装所有的数.然后用front[x],last[x]记录位置x上开始和结束的数. 对于Insert,维护listed:删除front[x+1]与last[x]的差值并插入两个新的差值,插入sorted后与前一个后一个作差更新答案. […
题目链接:BZOJ - 1058 题目分析 这道题看似是需要在序列中插入一些数字,但其实询问的内容只与相邻的元素有关. 那么我们只要对每个位置维护两个数 Ai, Bi, Ai 就是初始序列中 i 这个位置的数, Bi 是在 i 这个位置insert的最后一个数. 那么在 i insert一个数 Num 的时候,造成的影响就是使得 Bi 和 A(i+1) 不再相邻,同时使 Bi 与 Num, Num 与 A(i+1) 相邻.然后将 Bi 更新为 Num. 这样就只需要实现一个multiset的功能…
BZOJ原题链接 洛谷原题链接 STL 本题可以直接使用\(\mathtt{STL\ multiset}\)水过去. 因为本题插入数的操作实际上就是将原数列分为\(n\)段,在每一段的末尾插入数,所以我们只需维护每一段的开头和末尾两个数,这样更新相邻差值时只需考虑插入数与原末尾和下一段的开头两个数的差值就好. 而维护这个差值,只开一个\(\mathtt{multiset}\)就好(其中是所有相邻差值).当插入一个数时,先将原本的末尾和后一段开头的差值从\(\mathtt{multiset}\)里…
题目链接 主要思路 /* 对于询问1,用堆代替multiset/Splay 对于询问2,multiset 1.注意哨兵元素 2.注意multiset中删除时是删除某元素的一个位置,而不是这个元素!这个值会全部都删掉 */ #include<set> #include<cstdio> #include<cctype> #include<algorithm> const int N=5e5+5,M=N*3,INF=1e9; int n,q,st[N],ed[N]…