内个我也不知道哪儿不对,TLE了,说说思路吧

其实思路也没什么说的,就是裸的splay,对于最后一个操作

我们记下每个区间的最长前缀,最长后缀,那么最长子序列就是

前缀,后缀,左子树的后缀+右子树的前缀+自己的值,里取max就行了

更新的时候前缀由左子树的前缀,左子树sum+右子树前缀转移

靠!!!!!!到底哪儿错了!!!!!TLE 你妹啊!!!!!

/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Time_Limit_Exceed
****************************************************************/ //By BLADEVIL
const
sroot =-; var
n, m :int64;
a :array[-..] of int64;
root :int64;
father, key, size :array[-..] of int64;
son :array[-..,..] of int64;
flag :array[-..] of boolean;
val, sum :array[-..] of int64;
pred, succ :array[-..] of int64; procedure swap(var a,b:int64);
var
c :int64;
begin
c:=a; a:=b; b:=c;
end; function get_max(a,b:int64):int64;
begin
if a>b then exit(a) else exit(b);
end; procedure update(x:int64);
begin
if x=sroot then exit;
size[x]:=size[son[x,]]+size[son[x,]]+;
sum[x]:=sum[son[x,]]+sum[son[x,]]+key[x];
pred[x]:=get_max(pred[son[x,]],sum[son[x,]]+pred[son[x,]]+key[x]);
succ[x]:=get_max(succ[son[x,]],sum[son[x,]]+succ[son[x,]]+key[x]);
end; procedure c_renew(x,y:int64);
begin
key[x]:=y; sum[x]:=size[x]*y;
pred[x]:=get_max(y,sum[x]);
succ[x]:=get_max(y,sum[x]);
val[x]:=y;
end; procedure r_renew(x:int64);
begin
swap(son[x,],son[x,]);
flag[x]:=not flag[x];
end; procedure push_down(x:int64);
var
l, r :int64;
begin
l:=son[x,]; r:=son[x,];
if flag[x] then
begin
if l<>- then r_renew(l);
if r<>- then r_renew(r);
flag[x]:=false;
end;
if val[x]<> then
begin
if l<>- then c_renew(l,val[x]);
if r<>- then c_renew(r,val[x]);
val[x]:=;
end;
end; function build(l,r:int64):int64;
var
mid :int64;
begin
mid:=(l+r) div ;
key[mid]:=a[mid];
build:=mid;
if mid->=l then
begin
son[mid,]:=build(l,mid-);
father[son[mid,]]:=mid;
end;
if mid+<=r then
begin
son[mid,]:=build(mid+,r);
father[son[mid,]]:=mid;
end;
update(mid);
end; procedure rotate(x,y:int64);
var
f :int64;
begin
push_down(x);
f:=father[x];
son[f,y]:=son[x,y xor ];
father[son[x,y xor ]]:=f;
if f=root then root:=x else
if f=son[father[f],] then
son[father[f],]:=x else
son[father[f],]:=x;
father[x]:=father[f];
father[f]:=x;
son[x,y xor ]:=f;
update(f);
update(x);
end; procedure splay(x,y:int64);
var
u, v :int64;
begin
while father[x]<>y do
if father[father[x]]=y then
rotate(x,ord(x=son[father[x],]))
else
begin
if x=son[father[x],] then u:= else u:=-;
if father[x]=son[father[father[x]],] then v:= else v:=-;
if v*u= then
begin
rotate(father[x],ord(x=son[father[x],]));
rotate(x,ord(x=son[father[x],]));
end else
begin
rotate(x,ord(x=son[father[x],]));
rotate(x,ord(x=son[father[x],]));
end;
end;
update(x);
end; function find(k:int64):int64;
var
t :int64;
begin
t:=root;
while true do
begin
push_down(t);
if size[son[t,]]+=k then exit(t);
if size[son[t,]]+>k then t:=son[t,] else
begin
dec(k,size[son[t,]]+);
t:=son[t,];
end;
end;
end; procedure insert;
var
i :longint;
l, s :int64;
p, q :int64;
begin
read(l,s);
for i:=n+ to n+s do read(a[i]);
readln;
q:=build(n+,n+s);
n:=n+s;
p:=find(l+); splay(p,sroot);
p:=find(l+); splay(p,root);
p:=son[root,];
father[q]:=p;
son[p,]:=q;
update(p);
update(root);
end; procedure delete;
var
p :int64;
l, s :int64;
begin
readln(l,s);
p:=find(l); splay(p,sroot);
p:=find(l+s+); splay(p,root);
p:=son[son[root,],];
father[p]:=-;
son[son[root,],]:=-;
update(son[root,]);
update(root);
end; procedure change;
var
l, s, c :int64;
p :int64;
begin
readln(l,s,c);
p:=find(l); splay(p,sroot);
p:=find(l+s+); splay(p,root);
p:=son[son[root,],];
c_renew(p,c);
update(son[root,]);
update(root);
end; procedure reverse;
var
p :int64;
l, s :int64;
begin
readln(l,s);
p:=find(l); splay(p,sroot);
p:=find(l+s+); splay(p,root);
p:=son[son[root,],];
r_renew(p);
//update(son[root,]);
//update(root);
end; procedure get_sum;
var
l, s :int64;
p :int64;
begin
readln(l,s);
p:=find(l); splay(p,sroot);
p:=find(l+s+); splay(p,root);
p:=son[son[root,],];
writeln(sum[p]);
end; procedure max_sum;
var
l, r :int64;
begin
readln;
l:=son[root,]; r:=son[root,];
writeln(get_max(succ[l]+pred[r]+key[root],get_max(pred[l],succ[r])));
end; procedure main;
var
i :longint;
ss :ansistring;
ch :char;
begin
fillchar(son,sizeof(son),);
read(n,m);
for i:= to n do read(a[i]);
inc(n);
root:=build(,n);
father[root]:=sroot;
readln;
for i:= to m do
begin
read(ch);
ss:='';
while ch<>' ' do
begin
ss:=ss+ch;
read(ch);
if ss='MAX-SUM' then break;
end;
if ss='INSERT' then insert else
if ss='DELETE' then delete else
if ss='MAKE-SAME' then change else
if ss='REVERSE' then reverse else
if ss='GET-SUM' then get_sum else
if ss='MAX-SUM' then max_sum;
end;
end; begin
main;
end.

bzoj 1500 修改区间 splay的更多相关文章

  1. [BZOJ 1500]维修数列 [Splay Tree从进阶到住院]

    历尽艰辛终于A掉了这题QwQ 贴COGS评论区几句话=.= 策爷:"splay/块状链表的自虐题.".深刻理解到如果没有M倾向就不要去写这题了.. -Chenyao2333 记得b ...

  2. BZOJ 1500/Luogu 2042 - 维修数列 - [NOI2005][Splay]

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1500 题目链接:https://www.luogu.org/problemnew/sho ...

  3. [BZOJ 1500] [NOI2005] 维修数列

    题目链接:BZOJ - 1500 题目分析 我要先说一下,这道题我写了一晚上,然后Debug了一整个白天..........再一次被自己的蒟蒻程度震惊= = 这道题是传说中的Splay维护数列的Bos ...

  4. 少年,想学带修改主席树吗 | BZOJ1901 带修改区间第k小

    少年,想学带修改主席树吗 | BZOJ1901 带修改区间第k小 有一道题(BZOJ 1901)是这样的:n个数,m个询问,询问有两种:修改某个数/询问区间第k小. 不带修改的区间第k小用主席树很好写 ...

  5. [BZOJ 1500] 维护序列

    Link: BZOJ 1500 传送门 Solution: 可能平衡树维护序列的所有操作都在这了吧…… 对序列的维护$fhq treap$和$Splay$都能做 有几个注意点: 1.维护序列时始终记得 ...

  6. 【ZOJ2112】【整体二分+树状数组】带修改区间第k大

    The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with t ...

  7. 【树状数组套主席树】带修改区间K大数

    P2617 Dynamic Rankings 题目描述给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+ ...

  8. HDU 4417.Super Mario-可持久化线段树(无修改区间小于等于H的数的个数)

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  9. HDU 2665.Kth number-可持久化线段树(无修改区间第K小)模板 (POJ 2104.K-th Number 、洛谷 P3834 【模板】可持久化线段树 1(主席树)只是输入格式不一样,其他几乎都一样的)

    Kth number Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

随机推荐

  1. 前端技术Jquery与Ajax使用总结

    前端技术Jquery与Ajax使用总结 虽然主要是做的后端,但是由于有些时候也要写写前台的界面,因此也就学习了下Jquery和Ajax的一些知识,虽说此次写的这些对于前端大神来说有些班门弄斧的感觉,但 ...

  2. 《百词斩·象形9000》第一册(上) 符号Symbol 1

    001-upon prep. 在......上面 Wish upon a star.#对着星星许愿. 002-think V. 想,思索,认为:以为,预料 What do you think?#你认为 ...

  3. AGV小车典型设计算法及应用

    1. AGV小车的发展背景 在现代化工业的发展中,提倡高效,快速,可靠,提倡将人从简单的工作中解放出来.机器人逐渐替代了人出现在各个工作岗位上.机器人具有可编程.可协调作业和基于传感器控制等特点,自动 ...

  4. thinkPHP form表单提交参数无法获取

    后台打印获取的数据为empty, 找了半天,是因为 input标签没有写name, 真是醉了!记一下,免得以后再犯错了.

  5. 官方文档:11G新特性SQL PLAN BASLINE 执行计划基线

    什么是SQL执行计划管理? SQL计划管理(SQL plan management)是一咱预防机制,记录和评估SQL语句的执行计划.SQL plan management的主要功能是sql plan ...

  6. 成为IT精英,我奋斗7年【转】

    这些日子 我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没 有方向 ,所以把我的经历写出来与大家共勉,希 ...

  7. Linux nohup 后台运行命令

    有一些爬虫的程序需要在后台运行,所以简单总结了一下nohup 的一些用法 基本命令:nohup command  $; 运行之后出现nohup: ignoring input and appendin ...

  8. Spring框架(依赖注入)

    特点 1轻量级和侵入性低 2依赖注入和面向接口实现松耦合 3面向切面编程 减少样式代码 专有名词: 1依赖注入:对象无需自行管理依赖关系.通过系统负责协调在创建对象的第三方组件的设定,实现依赖关系自动 ...

  9. JAVA-I/O流任务

    作业地址 5. Scanner基本概念组装对象 编写public static List readStudents(String fileName)从fileName指定的文本文件中读取所有学生,并将 ...

  10. PTA实验报告 数组

    (第二张代码均为英红的代码) 题目1:题目名称:数组元素循环右移问题 1. 本题PTA提交列表 2. 设计思路(包括流程图) 将数组内每个位置移动,第2个放第一个,第三个放第二个,以此类推.使用两个循 ...