NOI2005维护数列】的更多相关文章

339. [NOI2005] 维护数列 时间限制:3 s   内存限制:256 MB [问题描述] 请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格) 操作编号 输入文件中的格式 说明 1.  插入 INSERT_posi_tot_c1_c2_..._ctot 在当前数列的第 posi 个数字后插入 tot 个数字:c1, c2, …, ctot:若在数列首插 入,则 posi 为 0 2.  删除 DELETE_posi_to…
[NOI2005] 维护数列 题目 传送门 请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格) 操作编号 输入文件中的格式 说明 1.  插入 INSERT_posi_tot_c1_c2_..._ctot 在当前数列的第 posi 个数字后插入 tot 个数字:c1, c2, …, ctot:若在数列首插 入,则 posi 为 0 2.  删除 DELETE_posi_tot 从当前数列的第 posi 个数字开始连续 删除 to…
到这里 \(A\) 了这题, \(Splay\) 就能算入好门了吧. 今天是个特殊的日子, \(NOI\) 出成绩, 大佬 \(Cu\) 不敢相信这一切这么快, 一下子机房就只剩我和 \(zrs\) 了. 忽然回想起之前大佬的一幕幕, 有一丝惆怅 真的不知道该怎么安慰dalao... 不过上天不会忽视那些默默努力的人的对吧 不想被说做作, 但是如果dalao能看到这篇博客的话, 大佬, 高考加油啊 为什么在这里写这些呢? \(Splay\) 其实是大佬领进门的, 学习的也是大佬的板子, 大佬很久…
因为要讲座,随便写一下,等讲完有时间好好写一篇splay的博客. 先直接上题目然后贴代码,具体讲解都写代码里了. 参考的博客等的链接都贴代码里了,有空再好好写. P2042 [NOI2005]维护数列 题目描述 请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格) 输入输出格式 输入格式: 输入文件的第 1 行包含两个数 N 和 M,N 表示初始时数列中数的个数,M 表示要进行的操作数目. 第 2 行包含 N 个数字,描述初始时的…
P2042 [NOI2005]维护数列 数列区间和,最大子列和(必须不为空),支持翻转.修改值.插入删除. 练码力的题,很毒瘤.个人因为太菜了,对splay极其生疏,犯了大量错误,在此记录,望以后一定要多多回顾!!!! (以后复习splay板子干脆就这道题算了) 1.审题问题(明明就是题目没说清楚的说) 最大子序列和不能为空,也就是必有数,有负数你也得选. 2.思路方面: 关于插入:在要插入的地方通过splay把他腾出空当不就行了.即把k旋到根,k+1旋到右儿子,则k+1左儿子必为空,此时把数列…
P2042 [NOI2005]维护数列 题意 题目描述 请写一个程序,要求维护一个数列,支持以下\(6\)种操作:(请注意,格式栏中的下划线'_'表示实际输入文件中的空格) 输入输出格式 输入格式: 输入文件的第\(1\)行包含两个数\(N\)和\(M\),\(N\)表示初始时数列中数的个数,\(M\)表示要进行的操作数目. 第\(2\)行包含\(N\)个数字,描述初始时的数列.以下\(M\)行,每行一条命令,格式参见问题描述中的表格. 输出格式: 对于输入数据中的GET-SUM和MAX-SUM…
[NOI2005]维护数列(luogu) 打这玩意儿真是要了我的老命 Description 请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格) Code #include <cstdio> #include <cstdlib> #include <algorithm> #define TAGNONE 10000001 using namespace std; ; struct node { ],res…
转自ZZH大佬,原文:http://www.cnblogs.com/LadyLex/p/7182631.html 1500: [NOI2005]维修数列 Time Limit: 10 Sec  Memory Limit: 64 MB Description   Input 输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初始时数列中数的个数,M表示要进行的操作数目. 第2行包含N个数字,描述初始时的数列. 以下M行,每行一条命令,格式参见问题描述中的表格. 任何时刻数列中最多含有…
1500: [NOI2005]维修数列 Time Limit: 10 Sec  Memory Limit: 64 MB Description Input 输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初始时数列中数的个数,M表示要进行的操作数目.第2行包含N个数字,描述初始时的数列.以下M行,每行一条命令,格式参见问题描述中的表格.任何时刻数列中最多含有500 000个数,数列中任何一个数字均在[-1 000, 1 000]内.插入的数字总数不超过4 000 000个,输入文…
http://www.lydsy.com/JudgeOnline/problem.php?id=1500 (题目链接) 题意 要求维护数列,操作有区间删除,区间插入,区间反转,区间修改,区间求和,求最大连续子段. Solution 愿有生之年再也不写splay.代码模的hzwer. 代码 // bzoj1500 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring>…
1500: [NOI2005]维修数列 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 6263  Solved: 1879[Submit][Status] Description Input 输入文件的第1行包含两个数N和M,N表示初始时数列中数的个数,M表示要进行的操作数目.第2行包含N个数字,描述初始时的数列.以下M行,每行一条命令,格式参见问题描述中的表格. Output 对于输入数据中的GET-SUM和MAX-SUM操作,向输出文件依次打印…
本题题解并不详细,不推荐大家看这一篇. 可以看这篇 题目描述 请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格) 100%的数据中,任何时刻数列中最多含有 500 000 个数. 100%的数据中,任何时刻数列中任何一个数字均在[-1 000, 1 000]内. 100%的数据中,M ≤20 000,插入的数字总数不超过 4 000 000 . 题解: 刷完普通平衡树,文艺平衡树板子后,本题纯靠自己想,用了3h打码,4h调试,共…
学了半天平衡树,选择了一道题来写一写,发现题目是裸的splay模板,但是还是写不好,这个的精髓之处在于在数列的某一个位置加入一个数列,类似于treap里面的merge,然后还学到了题解里面的的回收空间做法,利用时间换取空间也是一种非常不错的做法,由于题目中有区间翻转的操作,所以只能用splay来写,然后对于一些区间最大值和区间最大子序列的询问我们可以用类似于线段树的合并操作来维护,总的来说这是一道对于树形数据结构非常好的运用的题目.——by VANE #include<bits/stdc++.h…
先是维修数列 题解看这里,但是我写的跑得很慢 #include <iostream> #include <cstdio> using namespace std; int n, m, idx[500005], a[500005], rot=0, uu, vv, sta[500005], din, ww, cnt; const int oo=0x3f3f3f3f; char ss[25]; struct Splay{ int zdz[500005], sum[500005], lma…
题目描述 请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线' _ '表示实际输入文件中的空格) 输入输出格式 输入格式: 输入文件的第 1 行包含两个数 N 和 M,N 表示初始时数列中数的个数,M 表示要进行的操作数目. 第 2 行包含 N 个数字,描述初始时的数列. 以下 M 行,每行一条命令,格式参见问题描述中的表格 输出格式: 对于输入数据中的 GET-SUM 和 MAX-SUM 操作,向输出文件依次打印结 果,每个答案(数字)占一行. 输入输出样例 输…
一直在想要做这道题,但是被那个硕大的Splay标签压垮了 好了,切入正题 这道题应该是我第二次用splay来维护区间问题 我还是太菜了QAQ 其实思路也很简单,就是以每一个位置的下标来进行维护,然后其实就是跟权值树是一模一样的了 然后再具体说一下 为了保证效率,像线段树和文艺平衡树一样,我们可以维护一个\({lazytag}\),然后在需要向下查询时再向下查询就行 然后我们考虑两种标记各自下传的先后顺序 我们可以发现,如果一个区间内已经被"同化",即进行了\(make-same\)操作…
题目链接 2017.12.24 第一次写: 时间: 2316ms (1268ms) 空间: 19.42MB (19.5MB)(O2) 注:洛谷测的时间浮动比较大 /* 插入一段数:将这些数先单独建一棵平衡树t'.将pos旋到根,pos+1旋到son[root][1],直接将t'放到son[pos+1][0]即可 删除一段数:将要删除区间旋转到r+1的左儿子上,直接删除 统一修改一段数.区间反转:同样,提取修改区间,打标记 区间求和:提取,输出记录的sum 最大子序列:有一种求最大子序列的nlog…
手动博客搬家: 本文发表于20180825 00:34:49, 原地址https://blog.csdn.net/suncongbo/article/details/82027387 题目链接: (luogu) https://www.luogu.org/problem/show?pid=2042 (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=1500 思路分析: 这个题嘛..思路没啥好说的 用splay每个点维护四个量:\(su…
这道题据说是noi题目中算是比较毒瘤的数据结构题了,5k多的代码加上随手写挂细节,我调了两天 题面见https://www.luogu.org/problemnew/show/P2042 (歪个题,这类区间操作的数据结构题可以先去写GSS系列题,会比较容易理解合并的操作) (再歪个题,我将在近期补一篇博客说一下自己区间树的理解) 一共维护6个操作 第一个操作为插入一棵新的子树,因为是插子树,所以单点插是要t飞的,那么就考虑一个优化,先建好树再挂到他应该出现的位置上 复杂度从nlogn降到了n.…
无指针Splay超详细讲解 区间树这玩意真TM玄学. 学这东西你必须要拥有的 1.通过[模板]文艺平衡树(Splay),[模板]普通平衡树,GSS3 - Can you answer these queries III 2.学会Splay,学会求最大子段和并知道怎么维护信息和下传标记,及会有区间修的最大子段和 3.多年的编程技巧,以及一颗写数据结构的良好心态 4.攒够两个月的肝,这很重要! 如果你不会上面东西的解决方法 1.看以下博客Splay入门解析,文艺平衡树Splay题解,GSS系列题解-…
#include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #include<stack> #define Tp Treap* #define DTp pair<Tp,Tp> #define ft first #define sc second #define INF 0x7f7f7f7f #define MAXN 500000+10 using n…
思路 超级恶心的pushdown 昏天黑地的调 让我想起了我那前几个月的线段树2 错误 这恶心的一道题终于过了 太多错误,简直说不过来 pushup pushdown 主要就是这俩不太清晰,乱pushdown 其他的写的还没啥毛病(能看出来) 代码 #include <iostream> #include <cstdio> #include <stack> #include <cstring> #include <algorithm> #defi…
题目链接 首先,这题我是没A的..太毒瘤了 题目本身不难,都是\(Splay\)的基操,但是细节真的容易挂. 调了好久自闭了,果断放弃.. 希望本节目停更. 放上最终版本 #include <cstdio> #include <algorithm> #define INF 2147483647 #define lc t[u].ch[0] #define rc t[u].ch[1] using namespace std; inline int read(){ int s = 0,…
真的毫无算法可言,就是比谁的码力强罢了... Code: #include<stack> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn = 500000 + 200; const int inf = -1223; int ch[maxn][2], f[maxn], numv[maxn], maxv[maxn], lmax[m…
「NOI2005」维护数列 传送门 维护过程有点像线段树. 但我们知道线段树的节点并不是实际节点,而平衡树的节点是实际节点. 所以在向上合并信息时要加入根节点信息. 然后节点再删除后编号要回退(栈),不然会爆空间. 具体实现看代码就好了. 参考代码: #include <algorithm> #include <cstdlib> #include <cstdio> #define rg register #define file(x) freopen(x".i…
https://daniu.luogu.org/problem/show?pid=2042 一道伸展树维护数列的很悲伤的题目,共要维护两个标记和两个数列信息,为了维护MAX-SUM还要维护从左端开始的数列的最大和及到右端结束的数列的最大和. 按照伸展树的套路,给数列左右两边加上不存在的边界节点,给每个子树的空儿子指向哨兵节点. 维护最大子数列和 题目说的子数列其实要求至少包含一个元素,这就要很恶心的维护方法. (其实让max_sum可以不含元素也能过90%) 每个节点定义max_sum:该节点的…
BZOJ_1500_[NOI2005]维修数列_splay 题意: 分析: 节点维护从左开始的最大连续子段和,从右开始的最大连续子段和,区间的最大连续子段和 插入:重新建一棵树,把pos旋到根,把pos+1旋到根的右儿子,直接插到根的右儿子的左儿子上 删除:节点回收,用循环队列或者栈存一下删除的节点,新建的时候用. 修改和翻转正常做,这两个标记互不影响.记得翻转时左右儿子的信息都要交换. 代码: #include <stdio.h> #include <string.h> #inc…
1500: [NOI2005]维修数列 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 8397  Solved: 2530 Description Input 输入文件的第1行包含两个数N和M,N表示初始时数列中数的个数,M表示要进行的操作数目.第2行包含N个数字,描述初始时的数列.以下M行,每行一条命令,格式参见问题描述中的表格. Output 对于输入数据中的GET-SUM和MAX-SUM操作,向输出文件依次打印结果,每个答案(数字)占一行.…
1500: [NOI2005]维修数列 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 6556  Solved: 1963[Submit][Status] Description Input 输入文件的第1行包含两个数N和M,N表示初始时数列中数的个数,M表示要进行的操作数目.第2行包含N个数字,描述初始时的数列.以下M行,每行一条命令,格式参见问题描述中的表格. Output 对于输入数据中的GET-SUM和MAX-SUM操作,向输出文件依次打印…
题目链接:BZOJ - 1500 题目分析 我要先说一下,这道题我写了一晚上,然后Debug了一整个白天..........再一次被自己的蒟蒻程度震惊= = 这道题是传说中的Splay维护数列的Boss题目. 前面的几个操作和询问看起来比较正常,就是最后一个维护最大区间和比较复杂. 其实这个也并不是十分复杂,只是要多维护一点东西,事实证明,我代码里的错误都不是与这个询问有关的. 维护每个节点的 Lmx[x] ,即这个节点的子树代表的区间的从左端开始的最大权值和.Rmx[x],同理.Mx[x],这…