序列终结者
题目
感觉没什么好说的
模板题
反正splay如果不翻转,可以线段树
#include<bits/stdc++.h>
#define re return
#define MAX(a,b) (a)>(b)?(a):(b)
#define inc(i,l,r) for(int i=l;i<=r;++i)
const int maxn=50005;
template<typename T>inline void rd(T&x)
{
char c;bool f=0;
while((c=getchar())<'0'||c>'9')if(c=='-')f=1;
x=c^48;
while((c=getchar())>='0'&&c<='9')x=x*10+(c^48);
if(f)x=-x;
}
using namespace std;
int rt,tot,n,m,fa[maxn],num[maxn],add[maxn],rev[maxn],mx[maxn],val[maxn],size[maxn];
struct node{
int ch[2];
}t[maxn];
inline void pushup(int x)
{
size[x]=1+size[t[x].ch[0]]+size[t[x].ch[1]];
mx[x]=max(val[x],max(mx[t[x].ch[0]],mx[t[x].ch[1]]));
}
inline void pushdown(int x)
{
if(add[x]){
if(t[x].ch[0])add[t[x].ch[0]]+=add[x],val[t[x].ch[0]]+=add[x],mx[t[x].ch[0]]+=add[x];
if(t[x].ch[1])add[t[x].ch[1]]+=add[x],val[t[x].ch[1]]+=add[x],mx[t[x].ch[1]]+=add[x];
add[x]=0;
}
if(rev[x])
{
if(t[x].ch[0])rev[t[x].ch[0]]^=1;
if(t[x].ch[1])rev[t[x].ch[1]]^=1;
swap(t[x].ch[0],t[x].ch[1]);
rev[x]=0;
}
}
inline bool chk(int x){re t[fa[x]].ch[1]==x;}
inline void rotate(int x)
{
int y=fa[x],z=fa[y],k=chk(x),w=t[x].ch[k^1];
pushdown(y);pushdown(x);
t[z].ch[chk(y)]=x;fa[x]=z;
t[x].ch[k^1]=y;fa[y]=x;
t[y].ch[k]=w;fa[w]=y;
pushup(y);pushup(x);
}
inline void splay(int x,int goal=0)
{
while(fa[x]!=goal)
{
int y=fa[x],z=fa[y];
if(z!=goal)chk(y)==chk(x)?rotate(y):rotate(x);
rotate(x);
}
if(!goal)rt=x;
}
inline int kth(int k)
{
int u=rt;
while(1)
{
pushdown(u);
int y=t[u].ch[0];
if(k>1+size[y])k=k-1-size[y],u=t[u].ch[1];
else if(k<=size[y])u=t[u].ch[0];
else re u;
}
re 0;
}
inline int build(int l,int r,int f){
if(l>r)return 0;
int x=++tot,mid=(l+r)>>1;
fa[x]=f,val[x]=mx[x]=num[mid];
t[x].ch[0]=build(l,mid-1,x);
t[x].ch[1]=build(mid+1,r,x);
pushup(x);
re x;
}
int main()
{
int l,r,opt,K;
rd(n);rd(m);
mx[0]=num[1]=num[n+2]=-2147483647;
//不能算入子序列和
rt=build(1,n+2,0);
inc(i,1,m)
{
rd(opt);rd(l);rd(r);
l=kth(l),r=kth(r+2);
splay(l,0);splay(r,l);
int v=t[t[rt].ch[1]].ch[0];
if(opt==1){
rd(K);
add[v]+=K;
val[v]+=K;
mx[v]+=K;
}
else if(opt==2)rev[v]^=1;
else printf("%d\n",mx[v]);
}
re 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!