剧恶心的splay……

为什么在bzoj上是超时,在自己的电脑上测的是栈溢出……

 const maxn=;
maxc=;
var
n,m,i,j,y,root,x,posi,t,head:longint;
ch:char;
op:array[..maxn] of boolean;
l,r,a,next,c,mc,s,ma,mb,sum:array[..maxn] of longint;
function max(x,y:longint):longint;
begin
if x>y then exit(x) else exit(y);
end;
procedure update(x:longint);
var ls,rs:longint;
begin
ls:=l[x];rs:=r[x];
sum[x]:=sum[ls]+sum[rs]+a[x];
ma[x]:=max(ma[ls],sum[ls]+ma[rs]+a[x]);
mb[x]:=max(mb[rs],sum[rs]+mb[ls]+a[x]);
mc[x]:=max(mc[ls],mc[rs]);
mc[x]:=max(mc[x],mb[ls]+ma[rs]+a[x]);
s[x]:=s[ls]+s[rs]+;
end;
procedure r_rotate(var x:longint);
var y:longint;
begin
y:=l[x];l[x]:=r[y];r[y]:=x;update(x);x:=y;
end;
procedure l_rotate(var x:longint);
var y:longint;
begin
y:=r[x];r[x]:=l[y];l[y]:=x;update(x);x:=y;
end;
procedure put(x,y:longint;flag:boolean);
var tmp:longint;
begin
if x= then exit;
if flag then
begin
tmp:=l[x];l[x]:=r[x];r[x]:=tmp;
tmp:=ma[x];ma[x]:=mb[x];mb[x]:=tmp;
op[x]:=not op[x];
end;
if y< then
begin
c[x]:=y;a[x]:=y;sum[x]:=s[x]*y;
mc[x]:=max(,sum[x]);
ma[x]:=mc[x];mb[x]:=mc[x];
if mc[x]= then mc[x]:=y;
end;
end;
procedure splay(var x:longint;y:longint);
var tmp:longint;
begin
put(l[x],c[x],op[x]);put(r[x],c[x],op[x]);
op[x]:=false;c[x]:=maxc;tmp:=s[l[x]]+;
if y=tmp then exit;
if y>tmp then
begin
splay(r[x],y-tmp);l_rotate(x);
end
else
begin
splay(l[x],y);r_rotate(x);
end;
end;
procedure build(var x:longint;lx,rx:longint);
begin
if lx>rx then exit;
x:=(lx+rx)>>;
build(l[x],lx,x-);
build(r[x],x+,rx);
update(x);
end;
procedure release(x:longint);
begin
if x= then exit;
next[x]:=head;head:=x;
release(l[x]);release(r[x]);
end;
procedure init;
begin
readln(n,m);root:=;
fillchar(c,sizeof(c),);
a[]:=-;a[n+]:=-;mc[]:=-;
for i:= to n+ do read(a[i]);readln;
head:=n+;
for i:=head+ to maxn do next[i-]:=i;
build(root,,n+);
end;
procedure main;
begin
for m:= to m do
begin
read(ch);
case ch of
'I':begin
while ch<>' ' do read(ch);
read(posi,t);
splay(root,posi+);
for t:= to t do
begin
read(y);x:=head;head:=next[head];
a[x]:=y;l[x]:=l[root];l[root]:=x;
r[x]:=;c[x]:=maxc;op[x]:=false;
update(x);
end;
update(root);
end;
'D':begin
while ch<>' ' do read(ch);
read(posi,t);
splay(root,posi);
splay(root,posi+t+);
release(r[l[root]]);r[l[root]]:=;
update(l[root]);update(root);
end;
'M':begin
read(ch);read(ch);
case ch of
'K':begin
while ch<>' ' do read(ch);
read(posi,t,x);
splay(root,posi);
splay(root,posi+t+);
put(r[l[root]],x,false);
update(l[root]);update(root);
end;
'X':writeln(mc[root]);
end;
end;
'R':begin
while ch<>' ' do read(ch);
read(posi,t);
splay(root,posi);
splay(root,posi+t+);
put(r[l[root]],maxc,true);
update(l[root]);update(root);
end;
'G':begin
while ch<>' ' do read(ch);
read(posi,t);
splay(root,posi);
splay(root,posi+t+);
update(root);
writeln(sum[r[l[root]]]);
end;
end;
readln;
end;
end;
begin
init;
main;
end.

声亦香的题解:http://blog.sina.com.cn/s/blog_86942b1401016dhb.html

可是他的两个程序交上去也是一样的结果……

NOI2005维修数列的更多相关文章

  1. [NOI2005] 维修数列

    1500: [NOI2005]维修数列 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 8397  Solved: 2530 Description In ...

  2. bzoj 1500: [NOI2005]维修数列 splay

    1500: [NOI2005]维修数列 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 6556  Solved: 1963[Submit][Status ...

  3. [BZOJ1500][NOI2005]维修数列---解题报告

    Portal Gun:[BZOJ1500][NOI2005]维修数列 有一段时间没写博客了,最近在刚数据结构......各种板子背得简直要起飞,题目也是一大堆做不完,这里就挑一道平衡树的题来写写好了 ...

  4. BZOJ_1500_[NOI2005]维修数列_splay

    BZOJ_1500_[NOI2005]维修数列_splay 题意: 分析: 节点维护从左开始的最大连续子段和,从右开始的最大连续子段和,区间的最大连续子段和 插入:重新建一棵树,把pos旋到根,把po ...

  5. bzoj千题计划221:bzoj1500: [NOI2005]维修数列(fhq treap)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1500 1.覆盖标记用INF表示无覆盖标记,要求可能用0覆盖 2.代表空节点的0号节点和首尾的两个虚拟 ...

  6. [BZOJ1500][NOI2005]维修数列 解题报告 Splay

    Portal Gun:[BZOJ1500][NOI2005]维修数列 有一段时间没写博客了,最近在刚数据结构......各种板子背得简直要起飞,题目也是一大堆做不完,这里就挑一道平衡树的题来写写好了 ...

  7. BZOJ 1500: [NOI2005]维修数列 (splay tree)

    1500: [NOI2005]维修数列 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 4229  Solved: 1283[Submit][Status ...

  8. 【BZOJ1500】[NOI2005]维修数列 Splay

    [BZOJ1500][NOI2005]维修数列 Description Input 输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初始时数列中数的个数,M表示要进行的操作数目.第2行 ...

  9. [bzoj1500][NOI2005]维修数列_非旋转Treap

    维修数列 bzoj-1500 NOI-2005 题目大意:给定n个数,m个操作,支持:在指定位置插入一段数:删除一个数:区间修改:区间翻转.查询:区间和:全局最大子序列. 注释:$1\le n_{ma ...

  10. 【BZOJ】1500: [NOI2005]维修数列

    [算法]splay [题解]数据结构 感谢Occult的模板>_<:HYSBZ 1500 维修数列 #include<cstdio> #include<cctype> ...

随机推荐

  1. 拓展:return和print的使用时机

    拓展:return和print的使用时机  一直纠结函数里的return用法.以下内容摘自百度知道..def 是用来定义函数的一个关键字,只有在函数的定义时用到他.Python 函数定义的语法:def ...

  2. WPF简单的口算案例

    前几天在博客园,看到有博友利用Winform做了一个口算案例,于是我想把它移植在WPF程序中.Winform程序:http://www.cnblogs.com/ImYZF/p/3345452.html ...

  3. linux下使用sqlplus使用上下键显示历史命令

    在linux下使用sqlplus没有在windows下方便,既不好用习惯的退格键,也无法通过上键来显示上一条的命令,这里我们使用rlwrap来解决. 1.安装rlwrap [root@toughhou ...

  4. grunt项目配置

    安装完CLI,还要在项目安装Grunt npm install -g grunt-cli npm install grunt --save-dev 源码放在src下 package.json放在根目录 ...

  5. linux驱动系列之arm汇编

    在arm平台学习linux时,会遇到arm汇编指令,arm汇编指令与8086汇编指令很多地方都不同,在此记下来以免后面忘了,同时在学习了汇编指令之后分析一些汇编指令编写的代码. 一.相对跳转指令b.b ...

  6. WCF入门教程一[什么是WCF]--转载只为学习收藏

    一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...

  7. NOI考前乱写

    还有13天NOI,把各种乱七八糟的算法都重新过一遍还是比较有必要的... //HDU 5046 Airport //DancingLink #include<iostream> #incl ...

  8. 漫话C++0x(五)—- thread, mutex, condition_variable

    熟悉C++98的朋友,应该都知道,在C++98中没有thread, mutex, condition_variable这些与concurrency相关的特性支持,如果需要写多线程相关程序,都要借助于不 ...

  9. IText 生成简单表格(报表)doc文档 单元居中

    IText生成doc文档需要三个包:iTextAsian.jar,iText-rtf-2.1.4.jar,iText-2.1.4.jar 亲测无误,代码如下所示: import com.lowagie ...

  10. 图形学:图像围绕着某个点P(a,b)旋转------白话版

    前提:在研究图形时候,我们并没有规定图形的大小,所以任意图形多是支持的,这也另外说明了一点,图形转换和图形的大小没有关系. 如果图像围绕着某个点P(a,b)旋转,则先要将坐标系平移到该点,再进行旋转, ...