CF1359D Yet Another Yet Another Task
题解的简单写法。
看到值域很小,而且限制我们快速求出贡献的是区间最大值,我们不妨枚举这个区间最大值
假如
假如有多个的话,运用扫描线的思想,然后发现到
然后线性维护
但是你发现这样求的是最大值
虽然这样求的有交集,但是总的并集是能够等价于原问题集合的。(最大值
这篇题解求得是最大值
所以我们发现,枚举最值的时候,通常是满足不等关系。
貌似没有线段树做法。
记
对于一个确定的右端点
线段树维护
用单调栈求出
然后你发现要维护
时间复杂度
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int a[N], n, s[N];
int stk[N], top;
struct Node {
int l, r;
int s, a, v; // s[i] + a[i]
int tag;
}tr[N << 2];
void pushup(int u) {
tr[u].v=min(tr[u<<1].v,tr[u<<1|1].v);
tr[u].s=min(tr[u<<1].s,tr[u<<1|1].s);
}
void pushdown(int u) {
if (tr[u].tag != 2e9) {
tr[u<<1].a=tr[u].tag,tr[u<<1].v=tr[u<<1].s+tr[u].tag;
tr[u<<1|1].a=tr[u].tag,tr[u<<1|1].v=tr[u<<1|1].s+tr[u].tag;
tr[u<<1|1].tag=tr[u<<1].tag=tr[u].tag;
tr[u].tag = 2e9;
}
}
void build(int u,int l,int r) {
tr[u]={l,r};
tr[u].tag=2e9;
if (l==r) {
tr[u].a=1e9;
tr[u].s=s[l];
tr[u].v=tr[u].a+tr[u].s;
tr[u].tag=2e9;
return;
}
int mid = l +r>>1;
build(u<<1,l,mid),build(u<<1|1,mid+1,r);
pushup(u);
}
void modify(int u,int L,int R,int k) {
if (tr[u].l>=L&&tr[u].r<=R) {
tr[u].a=k;
tr[u].v=tr[u].s+k;
tr[u].tag=k;
return ;
}
int mid=tr[u].l+tr[u].r>>1;
pushdown(u);
if (L<=mid) modify(u<<1,L,R,k);
if (R>mid) modify(u<<1|1,L,R,k);
pushup(u);
}
int query(int u,int L,int R) {
if (tr[u].l>=L&&tr[u].r<=R)
return tr[u].v;
int mid=tr[u].l+tr[u].r>>1;
pushdown(u);
int res=2e9;
if (L<=mid) res=min(res,query(u<<1,L,R));
if (R>mid) res=min(res,query(u<<1|1,L,R));
return res;
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i ++ ) scanf("%d", &a[i]);
for (int i = 1; i <= n; i ++ ) s[i] = s[i - 1] + a[i];
int ans = 0;
build(1,0,n);
for (int i = 1; i <= n; i ++ ) {
while (top && a[stk[top]] <= a[i]) top -- ;
// [stk[top], i-1]拍成 a[i]+s[k]
modify(1,stk[top],i-1,a[i]);
ans=max(ans,s[i]-query(1,0,i-1));
stk[ ++ top] = i;
}
cout << ans << endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端