先给自己立一个flag

我希望上午能写完

再立一个flag

我希望下午能写完。

再立一个flag

我希望晚上能写完。。。

我终于A了。。。

6700+ms...(6728)

我成功地立了3个flag。。。

 // It is made by XZZ
#include<cstdio>
#include<algorithm>
#include<ctime>
#include<cstdlib>
using namespace std;
#define rep(a,b,c) for(rg int a=b;a<=c;a++)
#define drep(a,b,c) for(rg int a=b;a>=c;a--)
#define erep(a,b) for(rg int a=fir[b];a;a=nxt[a])
#define il inline
#define rg register
#define vd void
#define mp make_pair
typedef long long ll;
typedef pair<int,int> pr;
il int gi(){
rg int x=,f=;rg char ch=getchar();
while(ch<''||ch>'')f=ch=='-'?-:f,ch=getchar();
while(ch>=''&&ch<='')x=x*+ch-'',ch=getchar();
return x*f;
}
#define Now t[now]
struct node{
int ls,rs,rand,size;
int data,sum,lmax,rmax,maxx;
bool rev,set;
int setnum;
il vd setdata(){data=setnum,sum=setnum*size,lmax=rmax=maxx=data>?sum:data,set=;}
}t[];
int stack[],top;
int root;
il int newnode(int data){
int now=stack[top];
Now.setnum=data,Now.setdata();
Now.rev=Now.set=;
Now.ls=Now.rs=;
Now.size=;
return stack[top--];
}
il vd down(int now){
if(Now.rev){
swap(Now.ls,Now.rs),swap(Now.lmax,Now.rmax);
t[Now.ls].rev^=,t[Now.rs].rev^=,Now.rev=;
}
if(Now.set){
Now.setdata();
t[Now.ls].set=,t[Now.ls].setnum=Now.setnum;
t[Now.rs].set=,t[Now.rs].setnum=Now.setnum;
}
}
il vd reset(int now){
if(Now.ls)down(Now.ls);
if(Now.rs)down(Now.rs);
Now.size=t[Now.ls].size+t[Now.rs].size+;
Now.sum=t[Now.ls].sum+t[Now.rs].sum+Now.data;
Now.lmax=t[Now.ls].sum+Now.data+max(t[Now.rs].lmax,);
Now.rmax=t[Now.rs].sum+Now.data+max(t[Now.ls].rmax,);
if(Now.ls)Now.lmax=max(Now.lmax,t[Now.ls].lmax);
if(Now.rs)Now.rmax=max(Now.rmax,t[Now.rs].rmax);
Now.maxx=max(t[Now.ls].rmax,)+max(t[Now.rs].lmax,)+Now.data;
if(Now.ls)Now.maxx=max(t[Now.ls].maxx,Now.maxx);
if(Now.rs)Now.maxx=max(Now.maxx,t[Now.rs].maxx);
}
il int merge(int a,int b){
if(!a||!b)return a|b;
if(t[a].rand<t[b].rand){down(a),t[a].rs=merge(t[a].rs,b),reset(a);return a;}
else {down(b),t[b].ls=merge(a,t[b].ls),reset(b);return b;}
}
il pr split(int now,int num){
if(!now)return mp(,);
down(now);
int ls=Now.ls,rs=Now.rs;
if(num==t[Now.ls].size){Now.ls=,reset(now);return mp(ls,now);}
if(num==t[Now.ls].size+){Now.rs=,reset(now);return mp(now,rs);}
if(num<t[Now.ls].size){
pr T=split(Now.ls,num);
Now.ls=T.second,reset(now);
return mp(T.first,now);
}else{
pr T=split(Now.rs,num-t[Now.ls].size-);
Now.rs=T.first,reset(now);
return mp(now,T.second);
}
}
il int build(int n){
int last;
int stk[n],tp=;
rep(i,,n){
int now=newnode(gi());last=;
while(tp&&t[stk[tp]].rand>Now.rand)reset(stk[tp]),last=stk[tp--];
if(tp)t[stk[tp]].rs=now;
Now.ls=last;
stk[++tp]=now;
}
while(tp)reset(stk[tp--]);
return stk[];
}
il vd rec(int now){
if(!now)return;
rec(Now.ls),rec(Now.rs),stack[++top]=now;
}
int main(){
int n=gi(),m=gi();char opt[];
rep(i,,)stack[-i+]=i;
top=;
srand();
rep(i,,)t[i].rand=i;
rep(i,,)swap(t[rand()%+].rand,t[rand()%+].rand);
root=build(n);
rep(i,,m){
scanf("%s",opt);
if(opt[]=='X')printf("%d\n",t[root].maxx);
else if(opt[]=='S'){
pr T=split(root,gi());
root=merge(merge(T.first,build(gi())),T.second);
}else{
pr T=split(root,gi()-),TT=split(T.second,gi());
if(opt[]=='K')t[TT.first].set=,t[TT.first].setnum=gi();
else if(opt[]=='V')t[TT.first].rev^=;
else if(opt[]=='T')printf("%d\n",t[TT.first].sum);
if(opt[]!='L')root=merge(T.first,merge(TT.first,TT.second));
else root=merge(T.first,TT.second),rec(TT.first);
}
}
return ;
}
/*
9 8
2 -6 3 5 1 -5 -3 6 3
GET-SUM 5 4
MAX-SUM
INSERT 8 3 -5 7 2
DELETE 12 1
MAKE-SAME 3 3 2
REVERSE 3 6
GET-SUM 5 4
MAX-SUM
*/

解题报告请看这里

[bzoj1500][luogu2042][cogs339][codevs1758]维修数列(维护数列)的更多相关文章

  1. 【bzoj1500】 noi2005—维护数列

    http://www.lydsy.com/JudgeOnline/problem.php?id=1500 (题目链接) 题意 要求维护数列,操作有区间删除,区间插入,区间反转,区间修改,区间求和,求最 ...

  2. 数据结构(Splay平衡树):COGS 339. [NOI2005] 维护数列

    339. [NOI2005] 维护数列 时间限制:3 s   内存限制:256 MB [问题描述] 请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线‘ _ ’表示实际 ...

  3. [NOI2005] 维护数列

    [NOI2005] 维护数列 题目 传送门 请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格) 操作编号 输入文件中的格式 说明 1 ...

  4. 【NOI2005】维护数列

    https://daniu.luogu.org/problem/show?pid=2042 一道伸展树维护数列的很悲伤的题目,共要维护两个标记和两个数列信息,为了维护MAX-SUM还要维护从左端开始的 ...

  5. BZOJ1798 AHOI2009 维护数列

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...

  6. ☆ [ZJOI2006] 书架 「平衡树维护数列」

    题目类型:平衡树 传送门:>Here< 题意:要求维护一个数列,支持:将某个元素置顶或置底,交换某元素与其前驱或后继的位置,查询编号为\(S\)的元素的排名,查询排名第\(k\)的元素编号 ...

  7. P2042 [NOI2005]维护数列 && Splay区间操作(四)

    到这里 \(A\) 了这题, \(Splay\) 就能算入好门了吧. 今天是个特殊的日子, \(NOI\) 出成绩, 大佬 \(Cu\) 不敢相信这一切这么快, 一下子机房就只剩我和 \(zrs\) ...

  8. 洛谷 P2042 [NOI2005]维护数列-Splay(插入 删除 修改 翻转 求和 最大的子序列)

    因为要讲座,随便写一下,等讲完有时间好好写一篇splay的博客. 先直接上题目然后贴代码,具体讲解都写代码里了. 参考的博客等的链接都贴代码里了,有空再好好写. P2042 [NOI2005]维护数列 ...

  9. P2042 [NOI2005]维护数列[splay或非旋treap·毒瘤题]

    P2042 [NOI2005]维护数列 数列区间和,最大子列和(必须不为空),支持翻转.修改值.插入删除. 练码力的题,很毒瘤.个人因为太菜了,对splay极其生疏,犯了大量错误,在此记录,望以后一定 ...

随机推荐

  1. No.4 - 3D 空间的卡片翻转动效

    参考 ①张鑫旭http://www.zhangxinxu.com/wordpress/2012/09/css3-3d-transform-perspective-animate-transition/ ...

  2. sqoop2启动job报错

    set option --name verbose --value true   #打开报错详情输出 Exception has occurred during processing command  ...

  3. VS Code 常用插件列表

    插件列表 Auto Close Tag 自动闭合HTML标签 Auto Rename Tag 修改HTML标签时,自动修改匹配的标签 Bookmarks 添加行书签 Can I Use HTML5.C ...

  4. OpenID Connect Core 1.0(五)使用授权码流验证(下)

    3.1.2.6 验证错误响应(Authentication Error Response) 验证错误响应是一个OAuth 2.0授权错误响应消息,是RP发送授权请求的消息,由OP授权终结点的响应返回. ...

  5. Java上机试题1

    1. 有一串字符串String s = "ababab", 这个字符串可以看做由3个"ab"构成,即n=3, L = "ab", s = n ...

  6. 网络的可靠性nyoj170

    网络的可靠性 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 A公司是全球依靠的互联网解决方案提供商,也是2010年世博会的高级赞助商.它将提供先进的网络协作技术,展 ...

  7. Linux常用命令拾遗

    查看端口对应的程序: netstat -nlap | grep 5004 输出: tcp 0 0 192.168.3.000:5004 192.118.201.00:50800 ESTABLISHED ...

  8. 记录一下idea的破解方法

    刚把idea升级到最新版,发现要重新激活,网上查了有改host的方法可行,只是有点麻烦.无意中发现一个方法,如图所示 输入    http://idea.java.sx/   即可,亲测可用.如果资金 ...

  9. tomcat 远程debug配置,教你远程调试代码,解决线上故障

      IDEA远程DEBUG Tomcat很简单,配置如下: 1.修改tomcat服务器配置 打开tomcat/bin/catalina.sh 在空白处添加如下参数 CATALINA_OPTS=&quo ...

  10. 记利用frp配合nginx实现内网透传

    frp下载 背景 : 内网有一台服务器A 在NAT背后 无法被其他客户端访问 借助公网服务器B来配置内网透传 即可通过B来访问A 服务端安装frps 启动: ./frps -c frps.ini 配置 ...