剧恶心的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. 实现在DevExpress.XtraGrid.GridControl的列头绘制复选框以实现全选的功能

    首先新建一个Win Form测试项目,拖一个GridControl控件到窗体上. public partial class Form1 : Form { public Form1() { Initia ...

  2. 自学JAVA总结

    2.在定义常量的时候C语言中定义为const而JAVA中为final3.在JAVA声明成员变量的时候,使用static来定义.4.在JAVA中的boolean类型只包括true和false,但是在C中 ...

  3. 如何将无线路由器作为交换机,将光猫(路由器A)分出来的一条网线接到自家另一台路由器B上,最大化利用网络资源

    从隔壁邻居只接了一条网线过来,由于无线网络的距离有限,不能覆盖到家里任何角落,然而,我又想家里一台台式电脑和无线设备都能够连接wifi进行上网。 摸索了一个上午,知道将家里的无线路由器B当作一个无线A ...

  4. MySQL行级锁,表级锁,页级锁详解

    页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...

  5. (转)《深入理解java虚拟机》学习笔记6——类加载机制

    Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程. 在加载阶段,java虚拟机需要完成以下 ...

  6. 【MyBatis】 通过包含的jdbcType类型

    BIT         FLOAT      CHAR           TIMESTAMP       OTHER       UNDEFINED TINYINT     REAL       V ...

  7. C#...何时需要重写ToString()方法?

    一般类型,都是继承自System.Object类,默认情况下,object类的ToString方法会返回当前类的类型的字符串表达形式.但也有例外!! DateTime,它就重写ToString方法,D ...

  8. jQuery ajax 实现分页 kkpager插件

    代码片段一: <!--分页组件 JS CSS 开始--> <!--分页组件 CSS--> <link type="text/css" href=&qu ...

  9. UUID为36位

    package util; import java.util.UUID; public class UUIDUtil { public static UUID getId(){ return UUID ...

  10. C# 读XML文件

    /// <summary> /// xml文件路径+名称 /// </summary> public void ReadXml(string xmlname) { try { ...