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

CF2152F Triple Attack

CF2152F Triple Attack

1.简化题意

给你 \(x_1,x_2,x_3,\dots,x_n\) 的不降序列,询问 \(q\) 次。

\([l,r]\) 内,最多选择几个元素,使得任意三个元素 \(x_i,x_j,x_k(i<j<k)\),有 \(x_k-x_i > z\)

有多测。

2.思路

首先有一个简单的暴力:取最开始的两个端点,然后一直选当前能选到的最小数。

简单证明:我们可以设 \(x_i + z\) 以后第一个数为 \(F_i\),发现单调不降,故有最优左端点选法。

3.优化

显然上述做法是 \(O(nq)\) 的,考虑朝 \(i \to F_i\) 连一条边。

这样形成了一个树形结构,我们可以通过暴力求出答案。

现在问题来到了树上,我们可以处理出来倍增数组进行跳跃。

具体的,最开始我们选中 \(l,l+1\) 两个点(贪心),那么跳跃的时候,我们记下一次跳到 \(\operatorname{LCA},\operatorname{LCA + 1}\) 为一次跳跃,发现这个过程可以用倍增维护。

如果不能再进行两个点的 \(\operatorname{LCA}\) 跳跃,两个点分开跳到 \(r\) 的地方。

所以我们做两次倍增,一次给 \(\operatorname{LCA}\),另外一次给成对的跳跃。

\(\Large \mathscr{Code}\)

#include<bits/stdc++.h>
using namespace std;
const int N = 3e5 + 100;
int n, k, T, val[N], q;
vector<int> g[N];
int dep[N], fa[N][25], lca[N][20], sum[N][20];
void dfs(int u, int fath) {fa[u][0] = fath;dep[u] = dep[fath] + 1;for (int i = 1; i <= 19; i++) fa[u][i] = fa[fa[u][i - 1]][i - 1];for (int e : g[u]) {if (e == fath) continue;dfs(e, u);}
}
int LCA(int x, int y) {if (dep[x] < dep[y]) swap(x, y);for (int i = 19; ~i; i--) if (dep[fa[x][i]] >= dep[y]) x = fa[x][i];if (x == y) return x;for (int i = 19; ~i; i--) if (fa[x][i] != fa[y][i]) x = fa[x][i], y = fa[y][i];return fa[x][0];
}
void solve() {for (int i = 0; i <= n; i++) g[i].clear();cin >> n >> k;for (int i = 1; i <= n; i++) cin >> val[i];int pos = 1;for (int i = 1; i <= n; i++) {while (pos <= n && val[pos] <= val[i] + k) pos++;if (pos <= n) g[pos].push_back(i);else g[0].push_back(i);}dfs(0, 0);for (int i = 1; i < n; i++) lca[i][0] = LCA(i, i + 1), sum[i][0] = dep[i] + dep[i + 1] - 2 * dep[lca[i][0]];for (int i = 1; i <= 19; i++) {for (int j = 1; j < n; j++) {lca[j][i] = lca[lca[j][i - 1]][i - 1];sum[j][i] = sum[j][i - 1] + sum[lca[j][i - 1]][i - 1];}}cin >> q;for (int i = 1; i <= q; i++) {int l, r;cin >> l >> r;if (l == r) {cout << 1 << '\n';continue;}if (r == l + 1) {cout << 2 << '\n';continue;}int ans = 0;for (int i = 19; ~i; i--) {if (lca[l][i] && lca[l][i] <= r) {ans += sum[l][i];l = lca[l][i];}}if (l == r) {cout << ans + 1 << '\n';continue;}int L = l, R = l + 1;for (int i = 19; ~i; i--) {if (fa[L][i] && fa[L][i] <= r) L = fa[L][i];if (fa[R][i] && fa[R][i] <= r) R = fa[R][i];}cout << ans + dep[l] - dep[L] + 1 + dep[l + 1] - dep[R] + 1 << '\n';}
}
int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> T;while (T--) solve();return 0;
}
http://www.hskmm.com/?act=detail&tid=36300

相关文章:

  • 2025年定型机厂家权威推荐榜:拉幅定型机/门富士/节能/余热回收/废气回收/烟气回收/智能排风/双层定型机源头企业综合解析
  • 2025年不锈钢方形水箱厂家权威推荐榜:食品级/消防用/生活水箱专业制造商,304不锈钢方形水箱定制加工实力解析
  • 2025年真空钎焊炉厂家权威推荐榜单:工业级真空热处理设备,真空扩散焊炉,高温钎焊设备专业制造商深度解析
  • 2025年10月办公家具公司推荐:对比评测五强榜,聚焦恺 威家具品质标杆
  • 2025年沈阳酒店电话推荐:北站西塔丽柏宠物友好市中心步行地铁口。
  • 2025年6月防腐木凉亭厂家电话推荐:江西纳美工艺家俱有限公司实地探厂报告
  • 2025年防腐木凉亭厂家电话推荐:江西纳美工艺家俱有限公司实地探厂记
  • 2025年发电机厂家推荐排行榜,发电机组出租,柴油发电机出租,甲醇发电机组租赁,移动式发电机出租,维修保养服务公司推荐
  • 2025年沈阳酒店电话推荐:北站西塔丽柏宠物友好市中心步行地铁口
  • 2025年拖鞋机厂家权威推荐榜:酒店拖鞋生产线、全自动拖鞋机、一次性拖鞋机、酒店一次性拖鞋机器专业选购指南
  • 2025年棒球帽源头厂家权威推荐榜:专业定制与潮流设计,运动棒球帽、时尚棒球帽、防晒棒球帽、品牌棒球帽公司精选!
  • 2025年栏杆护栏厂家权威推荐榜:不锈钢栏杆、桥梁防撞护栏、河道景观护栏最新选购指南与实力解析
  • 2025年兄弟机床维修厂家权威推荐榜:专业维修、快速响应、技术精湛,兄弟机床维修优质厂家一站式服务指南
  • 【GitHub每日速递 251022】81.2k star, Bun:替代 Node.js 的全栈 JavaScript 神器,快速上手攻略来了!
  • 2025年电主轴精密球轴承厂家推荐排行榜:高精度主轴轴承,机床主轴专用轴承,高速电主轴轴承公司口碑之选
  • 2025年工作服厂家推荐排行榜,防静电/劳保/国网/餐厅/工厂/电工/防酸碱/电力/车间/航空/员工工作服,文化衫/t恤/polo衫/冲锋衣/t恤衫公司推荐
  • 2025年流量计厂家权威推荐榜:热式/模拟式/数字式/高压/高温/耐腐蚀/多气体/4-20mA/RS485/分体式/不锈钢高精度流量计精选
  • 2025年CAR-T冷链运输厂家权威推荐榜:细胞治疗冷链物流专业服务与技术创新实力解析
  • 2025年陶瓷过滤机厂家权威推荐榜:真空/盘式/矿用/全自动/真空带式陶瓷过滤机,固液分离设备,真空脱水机,尾矿处理设备,圆盘过滤机专业选购指南
  • 2025年服饰厂家权威推荐榜:棒球帽,卫衣,羽绒服源头厂家精选,潮流设计与舒适品质双重保障
  • 下步计划 - MKT
  • [Bash] Bash Survival Guide for Python Programmers
  • 2025年防腐木厂家权威推荐榜:深度解析户外防腐木、碳化木、景观木优质厂家实力与选购指南
  • 使用Jupyter和Prodigy发现文本分类中的错误标签
  • 读AI赋能06多模态
  • 2025年流量控制设备厂家推荐排行榜:流量计,流量控制器,流量调节阀,流量控制阀,比例调节阀专业选购指南
  • 2025年吹塑机厂家推荐排行榜,挤出吹塑机,注射吹塑机,拉伸吹塑机,发泡吹塑机,物理发泡吹塑机,mucell发泡吹塑机,工具箱吹塑机,瓶子吹塑机,半导体清洗液瓶子吹塑机公司推荐
  • CLIPSeg 使用文本和图像提示进行图像分割 - MKT
  • 要把人看做动物
  • 通用矩阵向量乘法(GEMV)优化实现与性能分析