当前位置: 首页 > news >正文

P8037 [COCI2015-2016#7] Prokletnik 题解

如果你做过 GSS2,那么你会发现它们很像,都是询问最优子段的问题。

这里有一个 trick,对于这一类询问最优子段的问题,首先考虑将询问离线,然后扫描线。若当前扫描到 \(i\),设 \(f_j\) 表示以 \(j\) 为左端点,\(i\) 为右端点的子段信息,可以维护 \(f_j\) 的历史最值求解。

如何理解这个历史最值。由于是扫描线依次添加每一个位置,那么 \(f_j\) 的历史最值即为以 \(j\) 为左端点,且右端点在 \([j, i]\) 的最优子段。可以用线段树维护区间历史最值。

那么问题在于如何维护 \(f_j\)。不妨设左小右大,那么左大右小将序列取倒数即可。

不难发现,若 \(i\) 能够成为最大值,则 \(\max\limits_{k\in[j,i]}{a_k} \le a_i\)。可以用单调栈维护 \(L_i\) 表示 \(i\) 左边第一个小于 \(a_i\) 的数的位置,则 \(j \in (L_i, i]\)

考虑哪些 \(j\) 是合法的。在扫描线的同时维护一个单调栈,单调不减。那么在栈中的位置一定是合法的 \(j\),弹出位置一定不合法。将不合法的位置标记,则 \((L_i, i]\) 中未被标记的位置即为所有合法的 \(j\)。用线段树区间修改即可。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6 + 5;
int n, Q, a[N], L[N], ans[N];
struct node
{int l, r, id;
};
vector<node> q;
struct Tree
{int maxi, tag, hismaxi, histag;
}tree[N << 2];
#define ls (cur << 1)
#define rs (cur << 1 | 1)
#define mid (lt + rt >> 1)
void pushup(int cur)
{tree[cur].maxi = max(tree[ls].maxi, tree[rs].maxi);tree[cur].hismaxi = max(tree[ls].hismaxi, tree[rs].hismaxi);return;
}
void build(int cur, int lt, int rt)
{tree[cur] = {0, 0, 0, 0};if(lt == rt){tree[cur] = {-lt + 1, 0, 0, 0};return;}build(ls, lt, mid), build(rs, mid + 1, rt);return pushup(cur);
}
void addtag(int cur, int tag, int histag)
{tree[cur].hismaxi = max(tree[cur].hismaxi, tree[cur].maxi + histag), tree[cur].maxi += tag;tree[cur].histag = max(tree[cur].histag, tree[cur].tag + histag), tree[cur].tag += tag;return;
}
void pushdown(int cur)
{if(!tree[cur].tag && !tree[cur].histag)return;addtag(ls, tree[cur].tag, tree[cur].histag);addtag(rs, tree[cur].tag, tree[cur].histag);tree[cur].tag = 0, tree[cur].histag = 0;return;
}
void update(int cur, int lt, int rt, int l, int r, int val)
{if(r < lt || rt < l)return;if(l <= lt && rt <= r){tree[cur].tag += val, tree[cur].histag = max(tree[cur].histag, tree[cur].tag);tree[cur].maxi += val, tree[cur].hismaxi = max(tree[cur].hismaxi, tree[cur].maxi);return;}pushdown(cur);update(ls, lt, mid, l, r, val), update(rs, mid + 1, rt, l, r, val);return pushup(cur);
}
int query(int cur, int lt, int rt, int l, int r)
{if(r < lt || rt < l)return 0;if(l <= lt && rt <= r)return tree[cur].hismaxi;pushdown(cur);return max(query(ls, lt, mid, l, r), query(rs, mid + 1, rt, l, r));
}
void solve()
{stack<int> stk;for(int i = n; i; i--){while(!stk.empty() && a[stk.top()] < a[i])L[stk.top()] = i + 1, stk.pop();stk.push(i);}while(!stk.empty())L[stk.top()] = 1, stk.pop();build(1, 1, n);int i = 0;for(auto [l, r, id] : q){while(i < r){i++;while(!stk.empty() && a[stk.top()] > a[i])update(1, 1, n, stk.top(), stk.top(), INT_MIN), stk.pop();stk.push(i);update(1, 1, n, L[i], i, i);update(1, 1, n, L[i], i, -i);}ans[id] = max(ans[id], query(1, 1, n, l, r));}return;
}
signed main()
{cin.tie(0) -> sync_with_stdio(0);cin >> n >> Q;for(int i = 1; i <= n; i++)cin >> a[i];for(int i = 1; i <= Q; i++){int l, r;cin >> l >> r;q.push_back({l, r, i});}sort(q.begin(), q.end(), [](auto x, auto y){return x.r < y.r;});solve();for(int i = 1; i <= n; i++)a[i] = -a[i];solve();for(int i = 1; i <= Q; i++)cout << ans[i] << "\n";return 0;
}
http://www.hskmm.com/?act=detail&tid=30153

相关文章:

  • 论文解读-《Learning Discrete Structures for Graph Neural Networks》 - zhang
  • 【A】The Lost Ship in the Sky
  • 2025 AI 品牌最新推荐排行榜:聚焦商业落地能力,甄选懂需求的实力服务机构东北 Ai/大连 Ai/大连 Ai 培训/大连 Ai 开发/大连 Ai 推广公司推荐
  • 基于经验模态分解的去趋势波动分析(EMD-DFA)方法
  • 双碳目标下企业零碳转型的 MyEMS 碳流可视化支撑体系:路径探索与效能评估
  • Langchain+Neo4j+Agent 的结合案例-电商销售 - 详解
  • ERP原理笔记
  • 2025 智慧康养实训室/专业建设/虚拟仿真/仿真实训室推荐榜:北京教之道 5 星领衔,适配多元康养场景
  • Wireshark】抓包实战,图文详解TCP三次握手及四次挥手原理
  • 2025 年国内水泵厂家最新推荐排行榜:涵盖多类型水泵,助力用户精准选购优质产品立式多级/自吸/磁力/排污/真空/离心水泵厂家推荐
  • 2025 年国内工业水泵厂家最新推荐排行榜:聚焦污水 / 离心 / 渣浆 / 大功率 / 泥浆类设备,助力企业精准选型
  • 基于深度学习的图像增强-zeros-DCE模型源码分享
  • redhat 链接宝塔mysql报错问题发现到解决
  • vue2初始化过程
  • [Doris/函数] Doris 之数据查询
  • 如何用AI绘制程序时序图
  • LLVM 后端支持 RISCV 矩阵扩展都有哪些方式
  • 简单聊聊数据可视化大屏制作的前端设计与后端开发
  • [THUWC 2018] 字胡串
  • 标识符
  • 2025 年钢结构厂家推荐榜:箱型H型/厂房仓库/电厂/桥梁/农牧业/锅炉/场馆/高层框架/装配式钢结构工厂,聚焦安全与品质,助力建筑项目精准选品
  • 2025 年粮库空调厂家最新推荐榜:聚焦技术创新与实用适配,助力粮库精准选购优质设备粮库空调一体机/粮库空调机组/碳钢喷塑粮库空调/低温粮库空调厂家推荐
  • 2025 年最新推荐!泳池除湿热泵厂家推荐榜单重磅发布,全方位解析优质厂家实力助您选对设备双模式/多功能/三集一体/全直流变频/室内/变频式泳池除湿热泵厂家推荐
  • django template filter safe escapejs json_script等
  • 2025年GEO(AI搜索优化)厂家口碑推荐排行榜
  • 2025年GEO(AI搜索优化)源头厂家权威推荐榜单:云视有客科技领跑行业新纪元
  • 2025年GEO服务商口碑推荐榜单:顶尖AI搜索优化厂家全方位解析
  • 2025年GEO(AI搜索优化)厂家口碑推荐榜:云视有客科技领跑行业创新
  • 2025 年涡流分离器源头厂家最新推荐排行榜:聚焦国内优质企业,助力制造企业精准采购可靠分离设备旋转分配器/油路分配器/离心过滤器厂家推荐
  • 欧美(美股、加拿大股票、墨西哥股票)股票数据接口文档